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的SelectedItem属性进行绑定。这将为您提供绑定到列表的集合的对象(项)。
示例项目可以在这里找到。
另外请注意,ItemTapped与ItemSelected不同。
如果你对将命令绑定到ListView项目Tapped感兴趣,那么请看看这个论坛上的帖子-如何将命令绑定至ListView.ItemTapped.