收听FreshMvvm中的ItemTapped事件

时间:2016-06-21 07:30:44

标签: mvvm xamarin.forms freshmvvm

在我的项目中我有一个列表视图,现在收听SelectedItem更改很容易,每个教程都有,但我找不到任何关于使用ItemTapped事件的内容。

如何将事件绑定到modelPage中?

谢谢,

麦克

1 个答案:

答案 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的行为,你可以在其中放置被点击的项目参考。