【发布时间】:2017-12-06 10:39:24
【问题描述】:
以同样的方式,我可以使用集合的 ICollectionView 上的 Filter 属性过滤 ObservableCollection 中的项目,是否也可以对集合执行 Select(与 Linq 一样)?
例如,假设我有一个没有 Selected 属性的 Food 对象列表,但我在单独的列表中维护了哪些食物被选中。理想情况下,我希望像这样执行我的 Select:
view.Select(f => return new { Food = f, Selected = selectedFood.Contains(f)});
然后我可以像这样绑定到从这个 Select 返回的项目:
<ListBox ItemsSource="{Binding FoodView}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Selected}">
<TextBlock Text="{Binding Food.Name}"/>
</CheckBox>
</DataTemplate>
</ListBox.ItemTemplate>
我目前正在通过维护单独的 ObservableCollections 并根据需要更新它们来实现我想要的结果,但我想知道是否有更优雅的解决方案。
干杯!
【问题讨论】:
-
你不能制作一个具有 Food 和 IsSelected 属性的对象包装器 SelectableFood 吗?然后,您可以使用该包装器类型的 ObservableCollection,而不是 Food 类型的可观察集合。
-
您是要使用复选框进行交互(读/写)还是仅演示(只读)
-
实现 INotifyPropertyChanged 的通用 SelectableItem
通常会有所帮助 -
@Lithium 和 Rufo 爵士,我目前正在这样做,但列表需要显示在多个地方,每个地方都有不同的选择。我正在寻找可以让我维护一个主要项目列表的东西,然后单独列出已选择的项目。感谢您的快速回复,顺便说一句!
标签: c# wpf linq data-binding observablecollection