0

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

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

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

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

4

1 回答 1

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>
于 2015-06-03T07:45:58.090 回答