我想绑定ListView的itemtapped属性到我的菜单页面,以便触发一个事件。我正在使用MVVM(Xamarin form labs)框架开发我的应用程序。我的目标是,当用户点击菜单项时,应用程序能够导航到正确的视图。
以下是XAML代码:
<ListView x:Name="list"
ItemsSource="{Binding MenuItems}"
SelectedItem="{Binding SelectedItem}"
ItemTapped= SET-BINDING-HERE >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
//setup template here
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我想将itemtapped事件绑定到这个函数:
public void NavigateTo(object sender, ItemTappedEventArgs args)
{
var test = args.Item as MenuModel;
cPageTypes.GetByKey(test.CommandParameter)
.SwitchRootPage(AIMCore.ViewModels.ElliottBaseViewModel.MasterPage);
list.SelectedItem = null;
AIMCore.ViewModels.BaseViewModel.MasterPage.IsPresented = false;
}
如果我将函数添加到视图的代码后面并设置ItemTapped='NavigatTo',则可以使其正常工作,但这似乎是错误的,因为它违背了MVVM的概念。我真正想做的是在我的ViewModel中绑定事件,实现相同的功能,就像这样:
<ListView x:Name="list"
ItemsSource="{Binding MenuItems}"
SelectedItem="{Binding SelectedItem}"
ItemTapped= "{Binding NavigateTo}" > // this binding is to the ViewModel
然而,这并没有起作用或者我没有正确地执行它。当我尝试以这种方式实现时,代码会产生错误。
错误:Xamarin.Forms.Xaml.XamlParseException:在Xamarin.Forms.Xaml.BaseValueNode.SetPropertyValue中找不到名称为ItemTapped的属性。
public ListViewWithCommands(ListViewCachingStrategy cachingStrategy) : base(cachingStrategy) { ItemTapped += ListViewWithCommands_ItemTapped; }
- Ton Snoeithis.ItemClickCommand.Execute(e.Item)
时,e.item 在 CanExecute 调用中也必须被使用。因此,请使用:this.ItemClickCommand.CanExecute(e.Item)
而不是this.ItemClickCommand.CanExecute(e)
。 - Ton Snoei