繁体   English   中英

在Xamarin.Forms中将命令传递到DataTemplate内部的TextCell

[英]Passing a Command to a TextCell inside a DataTemplate in Xamarin.Forms

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

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

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

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

将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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM