Прослушивание события 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
в котором вы положили ссылку на постучал предмет.