在 FreshMvvm 中监听 ItemTapped 事件
Listen to ItemTapped Event in FreshMvvm
在我的项目中,我有一个列表视图,现在监听 SelectedItem 的变化很容易,每个教程都有,但我找不到任何关于使用 ItemTapped 事件的信息。
我在modelPage中将事件绑定到什么?
谢谢,
迈克
因为 ItemTapped
是一个事件而不是 Command
(或者 BindableProperty
根本)你不能直接从你那里使用它 PageModel
.
他们为此发明了类似 Behaviors
的东西。使用行为,您可以将 Event
变成 Command
.
虽然有第三方插件可以做到这一点,例如 Corcav's one, it is also built into 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 ... -->
请注意,这是一个集合,因此您可以根据需要添加更多(在其他情况下也是如此)。
另请注意,我 确实 实际上也使用了 SelectedItem
。这可能是您想要的,否则您点击的项目将保持选中状态。所以 SelectedItem
属性 只是将其设置回 null
(因此是 TwoWay)。但您也可以从那里获取实际选择的项目。
所以现在在你的 PageModel
中声明一个命令并用这样的东西分配给它:
private void ItemSelected()
{
// Open the article page.
if (_selectedItem != null)
{
CoreMethods.PushPageModel<GroupArticlePageModel>(_selectedItem, false, true);
}
}
_selectedItem
是 属性 所点击的项目所分配到的。
当然,您可以做得更好,并使用 CommandParameter
提供行为,您可以在其中放置点击的项目引用。
在我的项目中,我有一个列表视图,现在监听 SelectedItem 的变化很容易,每个教程都有,但我找不到任何关于使用 ItemTapped 事件的信息。
我在modelPage中将事件绑定到什么?
谢谢,
迈克
因为 ItemTapped
是一个事件而不是 Command
(或者 BindableProperty
根本)你不能直接从你那里使用它 PageModel
.
他们为此发明了类似 Behaviors
的东西。使用行为,您可以将 Event
变成 Command
.
虽然有第三方插件可以做到这一点,例如 Corcav's one, it is also built into 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 ... -->
请注意,这是一个集合,因此您可以根据需要添加更多(在其他情况下也是如此)。
另请注意,我 确实 实际上也使用了 SelectedItem
。这可能是您想要的,否则您点击的项目将保持选中状态。所以 SelectedItem
属性 只是将其设置回 null
(因此是 TwoWay)。但您也可以从那里获取实际选择的项目。
所以现在在你的 PageModel
中声明一个命令并用这样的东西分配给它:
private void ItemSelected()
{
// Open the article page.
if (_selectedItem != null)
{
CoreMethods.PushPageModel<GroupArticlePageModel>(_selectedItem, false, true);
}
}
_selectedItem
是 属性 所点击的项目所分配到的。
当然,您可以做得更好,并使用 CommandParameter
提供行为,您可以在其中放置点击的项目引用。