在listview中的图像上使用Tap Gestures

时间:2017-08-03 13:15:11

标签: c# listview mvvm xamarin.forms prism

我在我的Xamarin表单应用程序中使用Prism,我有一个_,其中每个Listitem有2个图像,一个编辑图像和删除图像。

我在这2张图片上使用了ListView,并为这些TapGesturesRecognizers绑定了DelegateCommands。但是这些DelegateCommands不会被调用。

提前致谢

这是我的XAML代码

TapGestureRecognizers

在我的ViewModel中:

<ListView x:Name="lstAddress" HasUnevenRows="True" SeparatorVisibility="None" ItemsSource="{Binding ListItems}" CachingStrategy="RecycleElement" >
        <ListView.Behaviors>
            <b:EventToCommandBehavior EventName="ItemTapped"
          Command="{Binding ListItemSelectCommand}"  EventArgsParameterPath="Item"/>
        </ListView.Behaviors>
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Orientation="Horizontal">
                        <Label  Text="{Binding Description}" FontSize="15" TextColor="#959595">
                        </Label>
                        <Image Source="Edit.png"  HeightRequest="50" WidthRequest="50" IsVisible="{Binding ShowEdit}">
                            <Image.GestureRecognizers>
                                <TapGestureRecognizer Command ="{Binding EditAddressCommand}"></TapGestureRecognizer>
                            </Image.GestureRecognizers>
                        </Image>
                        <Image Source="Delete.png" ClassId="{Binding ListID}" HeightRequest="30" WidthRequest="30" IsVisible="{Binding ShowIcon}">
                            <Image.GestureRecognizers>
                                <TapGestureRecognizer Command ="{Binding DeleteAddressCommand}"></TapGestureRecognizer>
                            </Image.GestureRecognizers>
                        </Image>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

1 个答案:

答案 0 :(得分:5)

对于列表中的每个项目,您的BindingContextListView的{​​{1}}不同。在本地,您的BindingContext是项目本身,这就是您可以获取“描述”属性的原因。 BindingContext正在您的商品中搜索名为Xamarin的{​​{1}},而不是您的视图模型。

如果需要,您可以制作一个Cross Binding引用...只需将项目模板中的命令替换为这样:

ICommand

它可能有用。