如何在 ViewModel 代码中处理 CollectionView On SelectedItem 事件而不是内容页面的后端代码? Xamarin.Form

How to process CollectionView On SelectedItem event in ViewModel Code instead of Back-end Code of Content Page? Xamarin.Form

我想从 CollectionView 中的 SelectedItem 获取数据,但这样做我必须使用 SelectionChanged_EventHandler(object sender, SelectionChangedEventArgs e),它似乎位于内容页面的后端代码中。我想在我的 ViewModel 代码中处理这项工作,因为我必须在 ViewModel 代码中将数据从 SelectedItem 传递到我的 ObservableCollection<>。

有没有什么方法可以让我从 CollectionView 中的 SelectedItem 获取数据,并在我的 ViewModel 代码中处理这个事件?

是的!有几种方法可以做到这一点:

1) 使用SelectedItem Bindeable属性触发事件

XAML:

<CollectionView
            SelectedItem="{Binding SelectedItem}" ..../>

视图模型:

public Item SelectedItem
        {
            get { return _selectedItem; }
            set
            {
                if (value == _selectedItem)
                    return;

                _selectedItem = value;
                TriggerMethodThatYouWant();
                OnPropertyChanged(nameof(BackgroundTest));
            }
        }

2) 使用 TapGestureRecognizer:这将在点击时触发,与选择不同但实现相同

Xaml:

<CollectionView
                ItemsSource="{Binding Items}">
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <StackLayout>
                            <StackLayout.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding tapCommand}" CommandParameter="{Binding .}"/>
                            </StackLayout.GestureRecognizers>
                      </DataTemplate>
                 </CollectionView.ItemTemplate>
<CollectionView>

Viewmodel:您必须创建命令和方法

    public Command<Item> tapCommand { get; }