如何解决如何将CollectionView SelectedItems绑定到列表?
我有一个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 或与名称=> MvxObservableCollection相同 在这里检查 Multi Pre-Selection
, 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
事件。然后在所选项目更改时手动更新绑定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。