在WPF中,对于CollectionViewSource上的筛选、分组和排序有很多讨论,什么不是"MVVM"-practical (特别是在代码后面添加过滤器时)。
我想让ViewModel控制这些属性(比如添加排序和筛选描述符),但是为了在异步ObservableCollection中使用SynchronizationContext
,我需要在视图中(在dispatcher线程上)实例化CollectionViewSource,而不是在模型中实例化--但是模型需要访问CollectionViewSource,以便从代码中添加过滤器、组和排序描述符,而不是在XAML中定义它们。为此,我想找到一种将XAML声明的CollectionViewSource对象绑定回ViewModel的方法。就像这样:
<UserControl.Resources>
<CollectionViewSource
IsLiveFilteringRequested="True"
x:Name="collectionViewSource"
x:Key="collectionViewSource"
Source="{Binding DataContext.myCollection, IsAsync=True}"
Binding="{Binding DataContext.myCollectionViewSourceProperty, Mode=OneTime}" />
</UserControl.Resources>
当然,CollectionViewSource没有一个“绑定”属性,而且源必须指向一个ObservableCollection。
有办法做到这一点吗?
发布于 2016-09-15 19:39:34
我最初的想法是让CollectionViewSource
在- XAML中定义并实例化,然后使用某种形式的附加属性将筛选器、组和排序属性绑定到视图模型上的值。可以肯定的是,here已经完成了(而且似乎起作用了)。
这将解决您的问题,因为CollectionViewSource
将在Dispatcher线程上实例化,但可以从视图模型(确保dispatcher线程上也发生绑定属性更改)来控制。
https://stackoverflow.com/questions/39517652
复制相似问题