【问题标题】:Passing a Command to a TextCell inside a DataTemplate in Xamarin.Forms将命令传递给 Xamarin.Forms 中 DataTemplate 内的 TextCell
【发布时间】:2015-03-07 19:09:40
【问题描述】:

我有一个 ListView,ItemsSource 绑定到 ViewModel,并且这些项目是一个自定义类(包含菜单的名称、图标和属于页面的类型,将在点击菜单点时启动)。

我发现可以将 Command 绑定到 TextCell,我希望这样做。但就我而言,列表不是固定的,而是生成的,我还没有找到解决方案。

Binding 中的ElementName 不起作用,xmlns:local 定义也不起作用。

有没有办法使用 Command 绑定,还是我应该坚持使用 ListView.ItemTapped 事件?

【问题讨论】:

    标签: c# binding xamarin.forms itemsource


    【解决方案1】:

    为列表中的每个项目添加一个 ICommand 属性:

    public class ItemViewModel
    {
        public string MenuName { get; set; }
        public string Icon { get; set; }
        public Type PageType { get; set; }
        public ICommand ItemTappedCommand { set; get; }
    }
    

    创建视图模型列表并设置命令以接收所需的参数作为参数;

    public List<ItemViewModel> CreateItemsViewModel(List<Item> items)
        {
            var list = new List<ItemViewModel>();
            foreach (var item in items)
                list.Add(new ItemViewModel()
                {
                    MenuName = item.MenuName,
                    Icon = item.Icon,
                    PageType = item.PageType,
                    ItemTappedCommand = new Command<Type>((type) =>
                    {
                        OpenPageOfType(type);
                    })
                });
            return list;
        }
    

    在 XAML 视图中,将所需值作为命令参数传递;

    <ListView ItemsSource="{Binding ItemsViewModel}" >
      <ListView.ItemTemplate>
        <DataTemplate>
          <TextCell Text="{Binding MenuName}"
              Command="{Binding ItemTappedCommand}"
              CommandParameter="{Binding PageType}" />
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>
    

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 2012-04-15
      • 2020-06-05
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多