ListView ItemClick在Xamarin.Forms(iOS)中不起作用

本文关键字:iOS 不起作用 Forms ItemClick Xamarin ListView | 更新日期: 2023-09-27 17:59:54

我们有一个自定义的ListView,它具有ItemClickCommand属性。我们使用local关键字将其绑定到XAML文件中。它适用于Xamarin.Forms Android,但在Xamarin.Forms iOS中不可点击。

请建议如何继续或我们在代码中做错了什么。

代码如下:

XAML文件:

<StackLayout x:Class="XYZ"
         xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:XYZ.UI;assembly=XYZ">
            <local:ListView ItemClickCommand="{Binding OnDataSelectionCommand, Mode=TwoWay}" ItemsSource="{Binding DataList}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout Orientation="Horizontal">
                                <Label FontSize="17"
                                       HorizontalOptions="Start"
                                       Text="{Binding }"
                                       TextColor="Black"
                                       VerticalOptions="Center" />

                                <Label FontSize="17"
                                       HorizontalOptions="Start"
                                       Text=" , "
                                       TextColor="Black"
                                       VerticalOptions="Center" />

                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </local:ListView>

视图模型:

private Command _onDataSelectionCommand;
public Command OnDataSelectionCommand
{
      get
      {
           return _onDataSelectionCommand ?? (_onDataSelectionCommand = new Command(async (s) =>
           {
                // TODO: get selected item from list !!
           }));
       }
}

创建的自定义列表:

  using System.Windows.Input;
  using Xamarin.Forms;         
  namespace XYZ.UI
  {     
    public class ListView : Xamarin.Forms.ListView
   {
    public static BindableProperty ItemClickCommandProperty = BindableProperty.Create<ListView, ICommand>(x => x.ItemClickCommand, null);
    public ListView()
    {
        this.ItemTapped += this.OnItemTapped;
    }
    public ICommand ItemClickCommand
    {
        get { return (ICommand)this.GetValue(ItemClickCommandProperty); }
        set { this.SetValue(ItemClickCommandProperty, value); }
    }
    private void OnItemTapped(object sender, ItemTappedEventArgs e)
    {
        if (e.Item != null && this.ItemClickCommand != null && this.ItemClickCommand.CanExecute(e))
        {
            this.ItemClickCommand.Execute(e.Item);
        }
    }
  }

ListView ItemClick在Xamarin.Forms(iOS)中不起作用

您必须使用ListView的SelectedItem属性进行绑定。这将为您提供绑定到列表的集合的对象(项)。

示例项目可以在这里找到。

另外请注意,ItemTapped与ItemSelected不同。

如果你对将命令绑定到ListView项目Tapped感兴趣,那么请看看这个论坛上的帖子-如何将命令绑定至ListView.ItemTapped.