代码之家  ›  专栏  ›  技术社区  ›  Yauhen Sampir

Xamarin本机,将操作绑定到listview项

  •  0
  • Yauhen Sampir  · 技术社区  · 7 年前

    一。 每一个单子我们都有 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 (不知何故,我们需要绑定所有这些命令)?

    1. 下一种方法是以某种方式处理remove/toggle按钮和其他 Listview 视图模型 .

    例子:

    ContactsListView.ItemRemoveClicked += (ItemModel model) => ViewModel.RemoveItem
    

    优点是:我们不再需要在ViewModel中处理命令

    1. 最后一种方法是 视图模型 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 ,可以直接绑定到 视图模型 .

    你用哪种方法,也许我漏掉了一些东西,如果你能提供一些例子或想法,那将是完美的。

    0 回复  |  直到 7 年前