2016-09-15 116 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將在分派器線程上實例化,但可以從視圖模型進行控制(確保綁定屬性更改也在分派器線程上發生)。