首页 > 解决方案 > ListView ItemTapEvent 使用 MVVMLight

问题描述

我正在尝试使用Xamarin Formsand构建应用程序MVVMLight。我已经使用菜单项创建了主详细信息页面。当用户点击菜单项时,我想浏览页面。现在的问题是创建ItemTapped事件以ListView使用MVVMLight 我试图通过网络查找但无法获得真正有效的正确答案。

到目前为止,我试图实现EventToCommandusingMVVMLight但 xaml 通过说抛出错误

在交互类型中找不到可附加属性行为

<ListView 
            ItemsSource="{Binding MenuItemsList}"            
            CachingStrategy="RecycleElement"           
            Margin="0,0,0,10"
            RowHeight="110"
            SeparatorVisibility="Default"
            x:Name="MenuList"

            >
            <i:Interaction.Behaviors>
                <i:BehaviorCollection>
                    <cmd:EventToCommand EventName="ItemSelected" Command="{Binding OnTapCommand}"                                   
                </i:BehaviorCollection>
            </i:Interaction.Behaviors>
              <DataTemplate>
                    <ViewCell>
                    </ViewCell>
              </DataTemplate>
</ListView>

下面提到了我正在使用的命名空间

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"

当我不使用时,MVVMLight我曾经使用自定义行为,例如behaviors:ItemTappedCommandBehavior.ItemTappedCommand="{Binding OnContactSelectCommand}"

但我真的不知道如何对MVVMLight. 我正在尝试在android 和 iOS 平台上运行移动应用程序

标签: listviewxamarinxamarin.formsmvvm-light

解决方案


在 ListView 中显示菜单项时,您可以利用 ListView 的内置功能来了解用户“选择”了什么。

换句话说,只需将 ListView 的 SelectedItem 属性绑定到 VM 中的属性。在该属性设置器中,您可以对逻辑进行编码以触发正确的页面导航。

所以 XAML 应该如下所示:

<ListView ItemsSource="{Binding MenuItemsList}"
          CachingStrategy="RecycleElement"
          Margin="0,0,0,10"
          RowHeight="110"
          SeparatorVisibility="Default"
          x:Name="MenuList"
          SelectedItem="{Binding SelectedMenuItem}">
    <DataTemplate>
        <ViewCell>
        </ViewCell>
    </DataTemplate>
</ListView>

推荐阅读