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

问题描述

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

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

标签: c#xamarin.formscontent-pages

解决方案


是的!做这件事有很多种方法:

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:这将触发 On Tapping,与选择不同但实现相同

xml:

<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; }

推荐阅读