如何在 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; }
我想从 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; }