一。
每一个单子我们都有
Model
Commands
.
例如:
public class ItemModel
{
public string MyName { get; set; }
public ICommand RemoveCommand { get; set; }
}
在哪里
ViewModel
SomeInitMethod
public class ViewModel
{
public ObservableCollection<ItemModel> Items {get;set;}
public async Task SomeInitMethod
{
Items = new ObservableCollection(await _myApiService.FetchItemsAsync());
foreach(var item in Items)
{
item.Command = new RelayCommand(RemoveItem);
}
}
public void RemoveItem(ItemModel item)
{
Items.Remove(item);
}
}
但我看到了一个缺点
someinit方法
RemoveCommand
. 如果我们应该设置2个甚至更多的命令,而不是在
ListItemView
(不知何故,我们需要绑定所有这些命令)?
-
下一种方法是以某种方式处理remove/toggle按钮和其他
Listview
视图模型
.
例子:
ContactsListView.ItemRemoveClicked += (ItemModel model) => ViewModel.RemoveItem
优点是:我们不再需要在ViewModel中处理命令
-
最后一种方法是
视图模型
ListItem
设置
.
例子
private void InitTableView() {
TableView.RegisterNibForCellReuse(ItemViewCell.Nib, ItemViewCell.Key);
var source = new ObservableTableViewSource <ItemModel>
{
DataSource = ViewModel.Items,
BindCellDelegate = (cell, viewModel, index) =>
{
if (cell is ItemModel memberCell)
{
memberCell.BindViewModel(viewModel);
memberCell.RemoveItem = (item) => ViewModel.RemoveItem;
}
}
};
TableView.Source = source;
}
优势
:我们不再需要
在里面
模型
,我们不需要设置这个
在里面
视图模型
可能的缺点是,我们不知何故需要ViewModel引用。
在WPF或UWP中
DataContext
,可以直接绑定到
视图模型
.
你用哪种方法,也许我漏掉了一些东西,如果你能提供一些例子或想法,那将是完美的。