2016-09-15 96 views
1

关于WPF中CollectionViewSource的过滤,分组和排序有很多讨论,什么是“MVVM” - 实用(特别是在代码隐藏中添加过滤器时)。我想要ViewModel控制这些属性(如添加排序和过滤器描述符),但为了使用SynchronizationContext与Asynchronous ObservableCollection,我需要在视图中(在调度器线程上)实例化的CollectionViewSource,而不是实例化在模型中 - 但模型需要访问CollectionViewSource以便从代码添加过滤器,组和排序描述符,而不是在XAML中定义它们。 为此,我想找到一种方法将XAML声明的CollectionViewSource对象BACK绑定到ViewModel。事情是这样的:将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。

有没有办法做到这一点?

回答

1

我最初的想法是将CollectionViewSource定义为 - 并通过--XAML实例化,然后使用某种形式的附加属性将过滤器,组和排序属性绑定到视图模型上的值。果然,这已经完成(并似乎工作),可以发现here

这应该可以解决您的问题,因为CollectionViewSource将在分派器线程上实例化,但可以从视图模型进行控制(确保绑定属性更改也在分派器线程上发生)。

相关问题