我正在试图弄清楚如何绑定ListView的ItemTapped以便使用Prism导航详细信息页面。 我尝试使用DelegateCommand,但我有一个错误:
异常是:XamlParseException - 位置15:7。找不到名称ItemTapped的属性
查看:
<ListView
ItemsSource="{Binding UsersList}"
SelectedItem="{Binding SelectedUser}"
ItemTapped="{Binding ShowUserDetail}"
RowHeight="65" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="20" HorizontalOptions="FillAndExpand">
<Label Text="{Binding Name}" TextColor="Blue" FontSize="15"/>
<Label Text="{Binding Email}" TextColor="Gray" FontSize="11"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
视图模型:
public class UsersViewModel : BindableBase
{
..... some bindable objects
INavigationService _navigationService;
public DelegateCommand ShowUserDetail { get; set; }
public UsersViewModel (INavigationService navigationService)
{
_navigationService = navigationService;
ShowUserDetail = new DelegateCommand(OnShowUserDetail);
}
public void OnShowUserDetail()
{
var par = new NavigationParameters();
par.Add("user", SelectedUser);
_navigationService.Navigate("UserDetail", par);
}
....
当我将此DelegateCommand绑定到<Button>
导航工作时。
可能这与Prism无关,但我找不到任何使用它的例子。
感谢。
答案 0 :(得分:3)
Button有一个要绑定的Command属性,而ListView的ItemTapped是一个需要eventhandler的事件。如果要使用绑定,则必须使用行为:
<ListView
ItemsSource="{Binding UsersList}"
SelectedItem="{Binding SelectedUser}"
RowHeight="65" >
<ListView.Behaviors>
<b:EventToCommand EventName="ItemTapped" Command="{Binding ShowUserDetail}" />
</ListView.Behaviors>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="20" HorizontalOptions="FillAndExpand">
<Label Text="{Binding Name}" TextColor="Blue" FontSize="15"/>
<Label Text="{Binding Email}" TextColor="Gray" FontSize="11"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
来源:https://forums.xamarin.com/discussion/comment/180600/#Comment_180600
编辑: EventToCommand是this NuGet package中的行为。
答案 1 :(得分:1)
我相信Barts片段在某种程度上也有效,但我真的不知道如何以及我必须实施的内容。我建议更好的解释和一些工作代码示例。
我找到了有效的解决方案。
添加nuget包&#34; xamarin形成行为&#34; (在便携式和所有子项目iOS,Android ......中),我在ListView中添加了这个:
<ListView
ItemsSource="{Binding UsersList}"
SelectedItem="{Binding SelectedUser}">
<b:Interaction.Behaviors>
<b:BehaviorCollection>
<b:EventToCommand EventName="ItemTapped" Command="{Binding ShowUserDetail}"/>
</b:BehaviorCollection>
</b:Interaction.Behaviors>
...
在标题中我设置了这一行(将b映射到命名空间):
xmlns:b="clr-namespace:Xamarin.Behaviors;assembly=Xamarin.Behaviors"
还有一件事,对于iOS平台,这必须放在AppDelegate.cs / FinishedLaunching方法中(因为错误异常,这里描述了xamarin-behaviors-with-xamarin-forms-ios)
Xamarin.Behaviors.Infrastructure.Init();
现在&#34; ItemTapped&#34;工作正常。