在 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 提供行为,您可以在其中放置点击的项目引用。