c# - 如何在 ViewModel 代码而不是内容页面的后端代码中处理 CollectionView On SelectedItem 事件?Xamarin.Form
问题描述
我想从 CollectionView 中的 SelectedItem 获取数据,但这样做我必须使用看起来在内容页面的后端代码中的 SelectionChanged_EventHandler(object sender, SelectionChangedEventArgs e)。我想在我的 ViewModel 代码中处理这项工作,因为我必须将数据从 SelectedItem 传递到 ViewModel 代码中的 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:这将触发 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; }
推荐阅读
- html - 如何使用 bootstrap4 隐藏移动设备的元素?
- excel - 具有灵活数据系列的图表
- sql-server - 为什么EF生成插入SQL时需要@@ROWCOUNT
- ruby-on-rails - 基于参数动态生成路由
- php - 我想在 laravel 5.8 中使用 ajax 删除一个条目
- python - 如何找到仅在使用 Selenium 滚动后可用的元素?
- python-annoy - 如何在 python 中使用 spotify 的 annoy 库?
- javascript - JavaScript 中的高级路由
- c# - 在事务中执行批量插入的令人困惑的性能和没有
- xml - Monaco Editor 默认不支持 XML 语言吗?