2016-09-15 2 views
1

Es gibt eine Menge Diskussion über das Filtern, Gruppieren und Sortieren auf CollectionViewSource in WPF, und was ist ein "MVVM" -Praktisches (insbesondere beim Hinzufügen von Filtern in Code-Behind).Bindung von XAML-definierter CollectionViewSource an ViewModel

Ich mag Ansichtsmodell Kontrolle über diese Eigenschaften (wie Sortier- und Filter Deskriptoren Zugabe), aber um SynchronizationContext mit einem asynchronen ObservableCollection zu verwenden, muß ich die Collection im View instanziiert (auf dem Dispatcher-Thread), nicht instanziiert im Modell - aber das Modell benötigt Zugriff auf die CollectionViewSource, um Filter-, Gruppen- und Sortierdeskriptoren aus dem Code hinzuzufügen, anstatt sie in XAML zu definieren. Zu diesem Zweck möchte ich einen Weg finden, das XAML-deklarierte CollectionViewSource-Objekt BACK an das ViewModel zu binden. Etwas wie folgt aus:

<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> 

Natürlich ist die Collection keinen „Binding“ Eigenschaft und die Quelle zu einem ObservableCollection verweisen.

Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

1

Mein erster Gedanke war, lassen Sie die CollectionViewSource definiert in - und instanziiert von - XAML und dann eine Form der angefügten Eigenschaft verwenden, um die Filter, Gruppen und Sortiereigenschaften an Werte auf dem Ansichtsmodell zu binden. Sicherlich ist dies bereits geschehen (und scheint zu funktionieren), wie es gefunden werden kann here.

Dies sollte Ihr Problem lösen, da die CollectionViewSource auf dem Dispatcher-Thread instanziiert wird, aber vom Ansichtsmodell gesteuert werden kann (sicherstellen, dass Änderungen der gebundenen Eigenschaften auch im Dispatcher-Thread auftreten).

Verwandte Themen