【发布时间】:2013-05-27 21:15:46
【问题描述】:
我有一个ObservableCollection<MyObject>,目前在我的视图中绑定到一个ListBox。 MyObject 有一个枚举属性,我们将其称为 On 和 Off(以及其他属性)。使用绑定,有没有办法过滤集合并仅显示打开或关闭的项目?
【问题讨论】:
标签: c# .net wpf data-binding filtering
我有一个ObservableCollection<MyObject>,目前在我的视图中绑定到一个ListBox。 MyObject 有一个枚举属性,我们将其称为 On 和 Off(以及其他属性)。使用绑定,有没有办法过滤集合并仅显示打开或关闭的项目?
【问题讨论】:
标签: c# .net wpf data-binding filtering
您应该看看CollectionViewSource 及其过滤功能。
如果您想在纯 MVVM 中进行过滤,您可以让您的视图模型公开ICollectionView 类型的属性,应用您想要的任何过滤器,然后从 XAML 绑定到该属性。
视图模型:
public ICollectionView MyCollectionView { get; set; }
public ViewModel()
{
var items = new List<string>
{
"Apple",
"Orange"
};
MyCollectionView = CollectionViewSource.GetDefaultView(items);
// Will only display items starting with "A".
MyCollectionView.Filter = item => ((string)item).StartsWith("A");
}
XAML:
<ListBox ItemsSource="{Binding MyCollectionView}"/>
【讨论】:
CollectionViewSource 还是需要代码隐藏?
您可能需要考虑collection view,或在视图模型中自己执行过滤。
【讨论】:
CollectionViewSource 还是需要代码隐藏?
<CollectionViewSource.Filter> 行,我得到了 2 个错误。第一个说“成员“过滤器”无法识别或无法访问。”第二个说“属性'过滤器'没有值。”