Pav*_*nin 9 data-binding wpf collectionview
好吧,我很困惑.
如果我的控件具有类型的依赖属性ItemsSource
,IEnumerable
并且用户将集合绑定到它,那么我有什么对象DependencyPropertyChangedEventArgs.NewValue
?
据我所知CollectionView
,隐藏为集合创建,我希望args.NewValue
是类型ICollectionView
.
来自这个博客:
当用户将WPF属性绑定到数据集合时,WPF会自动创建一个视图来包装集合,并将属性绑定到视图,而不是原始集合.此行为总是发生,并且独立于CollectionViewSource.
但调试器(VS 2012,.net v.4.0)告诉我,我收到了原始的原始集合NewValue
.(BindsDirectlyToSource没有设置,默认情况下等于false)
这怎么可能?!
我无法理解在这种情况下WPF控件如何支持排序,分组和过滤.
CollectionView如何以及何时注入和使用?
也许以下来自CollectionView备注部分的摘录可以回答您的问题:
在 WPF 应用程序中,所有集合都有一个关联的默认集合视图。绑定引擎始终通过关联的视图访问集合,而不是直接使用集合。要获取默认视图,请使用 CollectionViewSource.GetDefaultView 方法。基于 CollectionView 的内部类是仅实现 IEnumerable 的集合的默认视图。ListCollectionView 是实现 IList 的集合的默认视图。BindingListCollectionView 是实现 IBindingListView 或 IBindingList 的集合的默认视图。
或者,您可以使用 CollectionViewSource 类以可扩展应用程序标记语言 (XAML) 创建集合的视图,然后将控件绑定到该视图。CollectionViewSource 类是 CollectionView 类的 XAML 表示形式。有关示例,请参阅如何:在 XAML 中使用视图对数据进行排序和分组。
因此,如果您没有显式绑定到 CollectionViewSource,则始终会对原始集合(您在 中获得的内容)进行集合绑定NewValue
,但对集合的访问(例如通过索引获取项目)始终通过默认视图完成。因此,“将属性绑定到视图,而不是原始集合”这一说法并不完全正确。
快速测试显示GetDefaultView为我绑定的 ObservableCollection返回一个System.Windows.Data.ListCollectionView。
归档时间: |
|
查看次数: |
368 次 |
最近记录: |