在我的项目中我有一个列表视图,现在收听SelectedItem更改很容易,每个教程都有,但我找不到任何关于使用ItemTapped事件的内容。
如何将事件绑定到modelPage中?
谢谢,
麦克
答案 0 :(得分:1)
由于ItemTapped
是一个事件,而不是Command
(或BindableProperty
),因此您无法直接使用PageModel
。
他们为此发明了Behaviors
之类的东西。使用“行为”,您可以将Event
变为Command
。
虽然有第三方插件可以像Corcav's one那样执行此操作,但它也内置于Xamarin.Forms now。
让我用Corcav解释一下,其他实现应该是类似的。另外我假设你正在使用XAML。
首先,安装NuGet并且不要忘记在页面中包含正确的命名空间,这意味着添加如下内容:xmlns:behaviors="clr-namespace:Corcav.Behaviors;assembly=Corcav.Behaviors"
现在在你的ListView
下宣布你的Behaviors
如此:
<!-- ... more XAML here ... -->
<ListView IsPullToRefreshEnabled="true" RefreshCommand="{Binding RefreshDataCommand}" IsRefreshing="{Binding IsBusy}" IsVisible="{Binding HasItems}" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" CachingStrategy="RecycleElement">
<behaviors:Interaction.Behaviors>
<behaviors:BehaviorCollection>
<behaviors:EventToCommand EventName="ItemSelected" Command="{Binding ItemSelectedCommand}" />
</behaviors:BehaviorCollection>
</behaviors:Interaction.Behaviors>
<!-- ... more XAML here ... -->
请注意,is是一个集合,因此您可以根据需要添加更多(在其他情况下也是如此)。
另请注意,我确实实际上也使用了SelectedItem
。这可能是您想要的,因为您点击的项目将保持选中状态。因此,SelectedItem
属性除了将其设置回null
(因此是TwoWay)之外没有多大帮助。但您也可以从那里获取实际选定的项目。
所以现在在你的PageModel
声明一个命令,并用这样的东西分配它:
private void ItemSelected()
{
// Open the article page.
if (_selectedItem != null)
{
CoreMethods.PushPageModel<GroupArticlePageModel>(_selectedItem, false, true);
}
}
_selectedItem
是分配了分配项目的属性。
当然,你可以做得更好,并提供一个CommandParameter
的行为,你可以在其中放置被点击的项目参考。