[英]How to bind CollectionView SelectedItems to a List?
我有一个 CollectionView,它包含一个项目列表。 我想不出将多个选定项目绑定到 ViewModel 中的列表的方法。
XAML 代码:
<CollectionView ItemsSource="{Binding Names}" SelectedItems="{Binding NamesSelection}" SelectionMode="Multiple">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding Name}" VerticalOptions="Center"/>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
非功能性 ViewModel 代码:
public MvxObservableCollection<Name> Names { get; } = new MvxObservableCollection<Name>(NamesHelpers.GetObjects());
private MvxObservableCollection<Name> _namesSelection;
public MvxObservableCollection<Name> NamesSelection
{
get=> _namesSelection;
set
{
SetProperty(ref _namesSelection, value);
}
}
如果我有 SelectedItem 子句,这可能会起作用。 但我不确定如何让它为 SelectedItems 工作。
理想的输出是 NamesSelection List 根据所选项目填充/取消填充。
尝试将 NamesSelection 设为 ObservableCollection 或与 Names 相同 => MvxObservableCollection 检查此处多预选
NamesSelection
( List ) 和Names
( MvxObservableCollection ) 需要是相同的集合类型,所以要么做:
private MvxObservableCollection<string> _namesSelection;
public MvxObservableCollection<string> NamesSelection
{
get=> _namesSelection;
set
{
SetProperty(ref _namesSelection, value);
}
}
或者
List<string> Names { get; }
在我看来,我建议使用List<T>
或ObservableCollection<T>
,因为它们是最常见的集合对象类型, MvxObservableCollection
可能不受CollectionView
支持或可能导致一些问题
SelectedItems
必须是IList<object>
。 ObservableCollection<object>
不实现该接口(例如List<Name>
,由于协方差) ,因此将不起作用。
解决方法是将SelectedItems
绑定到List<object>
,然后订阅SelectionChanged
事件。 然后在所选项目更改时手动更新绑定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.