【问题标题】:Using Tap Gestures on images within listview在列表视图中的图像上使用点击手势
【发布时间】:2018-01-11 02:58:19
【问题描述】:

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

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

提前致谢

这是我的 XAML 代码

<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>

在我的 ViewModel 中:

public class AddressBookViewModel : BindableBase
{
    INavigationService  _navigationService;
    public DelegateCommand EditAddressCommand { get;  set; }
    public DelegateCommand DeleteAddressCommand { get;  set; }

    public ObservableCollection<ListModel> ListItems {get;set;} = new ObservableCollection<ListModel>();

    public DelegateCommand<ListModel> ListItemSelectCommand { get;  set; }


    public MyZypListsViewModel(INavigationService navigationService)
    {
        _navigationService = navigationService;
        EditAddressCommand = new DelegateCommand(EditAddress);
        DeleteAddressCommand = new DelegateCommand(DeleteAddress);
        ListItemSelectCommand = new DelegateCommand<ListModel>(ListItemSelected);
    }

    private void EditAddress()
    {
       //Edit listitem  
    }

    private void DeleteAddress()
    {
       //Delete listitem   
    }
}

【问题讨论】:

    标签: c# listview mvvm xamarin.forms prism


    【解决方案1】:

    对于您列表中的每一项,您的BindingContextListViewBindingContext 不同。在本地,您的 BindingContext 是项目本身,这就是为什么您可以获得“描述”属性,例如。 Xamarin 正在您的项目中搜索名为 EditAddressCommandICommand,而不是在您的视图模型中。

    如果需要,您可以进行交叉绑定引用...只需将项目模板中的命令替换为这种方式:

    Command ="{Binding BindingContext.EditAddressCommand, Source={x:Reference lstAddress}" 
    

    它可能会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2013-06-23
      相关资源
      最近更新 更多