在WPF中,关于CollectionViewSource的筛选,分组和排序有很多讨论,什么是不“MVVM”实用的(尤其是在后面的代码中添加Filters时)。
我想让ViewModel控制这些属性(例如添加排序和过滤器描述符),但是为了将SynchronizationContext
与Asynchronous ObservableCollection一起使用,我需要在View中(在分派(dispatch)器线程上)实例化CollectionViewSource,而不是在模型中实例化-但是模型需要访问CollectionViewSource,以便从代码中添加过滤器,分组和排序描述符,而不是在XAML中定义它们。
为此,我想找到一种将XAML声明的CollectionViewSource对象BACK绑定(bind)到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没有“Binding”属性,并且源必须指向ObservableCollection。
有没有办法做到这一点?
最佳答案
我最初的想法是保留在XAML中定义并由XAML实例化的CollectionViewSource
,然后使用某种形式的附加属性将筛选器,组和排序属性绑定(bind)到 View 模型上的值。可以肯定地说,这已经完成了(并且似乎起作用了),就像here一样。
这将解决您的问题,因为CollectionViewSource
将在Dispatcher线程上实例化,但可以从 View 模型进行控制(确保绑定(bind)属性更改也发生在分派(dispatch)器线程上)。
关于wpf - 将XAML定义的CollectionViewSource绑定(bind)到ViewModel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39517652/