Xaml 如何使用MVVM在xamarin listview中添加多个命令按钮?

Xaml 如何使用MVVM在xamarin listview中添加多个命令按钮?,xaml,listview,xamarin,Xaml,Listview,Xamarin,我正在尝试创建一个listview,用户可以在其中选择要查看商店的列表项,还可以单击图像将他们带到产品详细信息。 如何在ViewCell中添加命令 <ListView ItemsSource="{Binding myData}" x:Name="myListView" SelectedItem="{Binding SelectedStore}" > <ListView.ItemTemplate> <DataTemplate>

我正在尝试创建一个listview,用户可以在其中选择要查看商店的列表项,还可以单击图像将他们带到产品详细信息。 如何在ViewCell中添加命令

    <ListView ItemsSource="{Binding myData}" x:Name="myListView" SelectedItem="{Binding SelectedStore}" > 
<ListView.ItemTemplate>
    <DataTemplate> 
        <ViewCell>  
        <Grid>    
              <Label Text="{Binding Title}" /> 
              <Image Source="product.png" >
                    <Image.GestureRecognizers>
                         <TapGestureRecognizer Command="{Binding ItemTapCommand}" CommandParameter="Id" />
                    </Image.GestureRecognizers>
                </Image> 
           </Grid>
        </ViewCell>
    </DataTemplate>
</ListView.ItemTemplate>

问题是您正试图绑定到一个命令,该命令不位于ListView中的单个项上;图像上的BindingContext是myData集合中的单个项

对于其他框架,例如Wpf,您只需使用绑定的RelativeSource部分来告诉控件在另一个控件的BindingContext上查找您的命令,但是在Xamarin表单中这是不可能的RelativeSource不受支持

您可以执行以下操作,但它要求您的UserControl具有x:Name:

这意味着使用UserControl作为绑定的源,并且该属性是由BindingContext.ItemTapCommand组成的UserControl上的嵌套属性


作为奖励,我更新了代码,因为我觉得您可能想将每条记录的Id属性的值绑定为命令参数,而不仅仅是将字符串Id作为命令参数发送。

我不清楚UserControl。这段代码在xaml页面中,我没有将其用作嵌入xaml页面的用户控件。这就是你的意思吗?如果不是,MyUserControl将是什么?@wil:xaml图中具有正确BindingContext的更高级别的任何内容。我假设它是一个用户控件,但它也可以是一个页面或其他更高层次的东西。见鬼,你甚至可以使用ListView,因为它已经有了一个名字myListView。这就是我想的。多谢。今晚我要试试这个。

    public ICommand ItemTapCommand => new Command(ShowSelectedProductAsync());

    private async Task ShowSelectedProductAsync()
    {
      //take them to view the item detail
    }
<TapGestureRecognizer Command="{Bindind Path=BindingContext.ItemTapCommand,
                                        Source={x:Reference MyUserControl}}"
                      CommandParameter="{Binding Id}" />