2016-06-21 4 views
1

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

Что мне нужно связать с событием в файле модели?

Спасибо,

Майк

ответ

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 ... --> 

Обратите внимание, что это коллекция, поэтому вы можете добавить больше, если хотите (также в других сценариях). Также обратите внимание, что I сделал на самом деле пользователь SelectedItem. Вероятно, это то, чего вы хотите, потому что оставленный элемент будет выбран. Таким образом, свойство SelectedItem не делает больше, чем устанавливает его на null (отсюда и TwoWay). Но вы также можете взять фактический выбранный элемент.

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

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

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

+0

Спасибо за помощь, это имеет смысл. –