2016-09-15 18 views
1

CollectionViewSourceのフィルタリング、グループ化、並べ替えについては、WPFで多くの議論があります。特に、コードビハインドでフィルタを追加する場合は、「MVVM」とは異なります。XAMLで定義されたCollectionViewSourceをViewModelにバインドする

非同期ObservableCollectionでSynchronizationContextを使用するには、View(ディスパッチャスレッド上)でインスタンス化され、インスタンス化されていないCollectionViewSourceが必要ですそのモデルでは、XAMLで定義するのではなく、コードからフィルター、グループ、およびソートの記述子を追加するために、モデルにCollectionViewSourceへのアクセスが必要です。 この目的のために、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はDispatcherスレッドでインスタンス化されますが、ビューモデルから制御することができます(ディスパッチャスレッドでバインドされたプロパティの変更も確実に行われるようにする必要があります)。

関連する問題