Wie kann ich das CollectionView abrufen, das in XAML definiert ist?

8

Ich wollte an ein ObservableCollection in XAML binden und dort auch die Gruppierung anwenden. Im Prinzip funktionierte das gut.

%Vor%

Dann wurde der Datenbindungsausdruck ItemsSource="{Binding Source={StaticResource ResourceKey=cvs}}" anstelle von ItemsSource="{Binding Path=TestTemplates}" .

Zuerst schien alles cool, bis ich die UI aus dem View-Modell aktualisieren wollte. Das Problem ist, dass CollectionViewSource.GetDefaultView(TestTemplates) eine andere Ansicht zurückgegeben hat als die von XAML, in der die Gruppierung angewendet wurde. Daher konnte ich keine Auswahl treffen oder irgendetwas Nützliches damit machen.

Ich könnte es beheben, indem ich die Liste erneut direkt an die Eigenschaft des Ansichtsmodells anbinde und die Gruppierung im Code-Behind einrichtet. Aber ich bin nicht so glücklich mit dieser Lösung.

%Vor%

Ich nehme an, der Grund dafür ist bereits von John Skeet hier gegeben .

Dennoch würde ich erwarten, dass es einen Weg geben sollte, die richtige Sichtweise zu bekommen. Liege ich falsch?

    
primfaktor 15.06.2012, 07:48
quelle

3 Antworten

1

Einen Weg gefunden, basierend auf J. Lennons Antwort. Wenn ich mit meinem Befehl etwas übergebe, das Zugriff auf die Ressourcen hat, kann ich dort das CollectionViewSource nachschlagen.

In XAML ( CollectionViewResource wie oben):

%Vor%

Und im VM-Code:

%Vor%

Execute ist diejenige, die dem RelayCommand zugewiesen wurde.

>

Dies würde die Frage beantworten, aber ich mag es nicht sehr. Meinungen?

    
primfaktor 27.06.2012, 06:07
quelle
5

Ich tendiere dazu, die Sammlungsansicht nur von der VM aus anzuzeigen, anstatt sie in der Ansicht zu definieren:

%Vor%

Auf diese Weise hat Ihre VM die volle Kontrolle darüber, was der Ansicht ausgesetzt ist. Es kann zum Beispiel die Sortierreihenfolge als Reaktion auf eine Benutzeraktion ändern.

    
Kent Boogaart 15.06.2012 08:01
quelle
5

Du konntest das nicht einfach tun?

%Vor%

Wenn die Daten verbunden sind, gehe ich davon aus, dass die Ansicht aktualisiert wird.

    
J. Lennon 26.06.2012 15:15
quelle