【问题标题】:ListView ItemClick not working in Xamarin.Forms (iOS)ListView ItemClick 在 Xamarin.Forms (iOS) 中不起作用
【发布时间】:2016-08-03 22:46:00
【问题描述】:

我们有一个自定义的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);
        }
    }
  }

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms


    【解决方案1】:

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

    可以在here 找到示例项目。

    另外请注意ItemTappedItemSelected 不同。

    如果您对将命令绑定到 ListView Item Tapped 感兴趣,请查看此论坛帖子 - How to bind a Command to ListView.ItemTapped

    【讨论】:

    • 感谢您的回答,因为IOS点击是工作,但长按后
    • 长按列表项?
    • 是的,我们有一个 List View ,上面的代码工作正常,我们可以从 ListView 中选择项目。但在 iOS 的情况下,我们需要长按该项目才能触发事件。
    • 您的OnItemTapped 是否会在点击列表项时触发?
    • 当注册了多个 GestureRecognizers 时,iOS 似乎偏爱最后一个,而 Android 将它们全部调用。这导致了我的问题。
    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 2018-03-05
    • 2017-05-18
    • 2018-12-10
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多