我有一个ListView,ItemsSource绑定到ViewModel,并且这些项目是一个自定义类(包含菜单的名称,图标和页面的类型,将在点击菜单点时启动)。
我发现可以将命令绑定到文本单元格,我希望这样做。但就像我的情况一样,列表不是固定的,而是生成的,我还没有找到解决方案。
绑定中的 ElementName 不起作用,xmlns:local 定义也不起作用。
有没有办法使用命令绑定,或者我应该坚持使用ListView.ItemTaped事件?
将 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>