Прослушивание события ItemTapped в FreshMvvm

В моем проекте у меня есть представление списка, теперь прослушивание изменений SelectedItem легко, это есть в каждом уроке, но я не могу найти что-либо об использовании события ItemTapped.

С чем мне связать событие в modelPage?

Спасибо,

Майк

1 ответ

Решение

Поскольку ItemTapped это событие, а не Command (или же BindableProperty вообще) вы не можете использовать это непосредственно от вас PageModel,

Они изобрели что-то вроде Behaviors за это. С поведением вы можете превратить Event к Command,

Хотя существуют сторонние плагины, которые делают это, как и Corcav, теперь они также встроены в Xamarin.Forms.

Позвольте мне объяснить это с помощью 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 (следовательно, Двусторонний). Но вы также можете взять оттуда фактически выбранный предмет.

Так что теперь в вашем PageModel объявите Команду и присвойте ей что-то вроде этого:

private void ItemSelected()
{
    // Open the article page.
    if (_selectedItem != null)
    {
        CoreMethods.PushPageModel<GroupArticlePageModel>(_selectedItem, false, true);
    }
 }

_selectedItem являясь свойством, которому назначен прослушиваемый элемент. Конечно, вы могли бы сделать это еще лучше и снабдить поведение CommandParameter в котором вы положили ссылку на постучал предмет.

Другие вопросы по тегам