С 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
, в которое вы положили ссылку на поступок.
Спасибо за помощь, это имеет смысл. –