Ich muss mit einer großen Datenmenge in einer WPF-Anwendung umgehen.
Ich habe die große Sammlung an eine ListView gebunden und verwende die ItemContainerStyle
, um die IsSelected-Eigenschaft des Listenelements mit der IsSelected
-Eigenschaft meines Objekts zu verknüpfen, sodass, wenn das Element in ListView
ausgewählt ist, meine Die IsSelected
-Eigenschaft von Objekten wird ebenfalls auf "true" gesetzt. Dadurch kann ich Befehle nur für die Objekte ausführen, die in der Liste ausgewählt wurden.
Ich benutze die UI-Virtualisierung in der ListView, weil die App ansonsten träge wäre. Da jedoch nur eine Teilmenge meiner gesamten Auflistung in der Liste sichtbar ist, wenn ich STRG + A zum Auswählen aller Elemente in meiner Liste verwende, wird nur für die Elemente, die geladen werden, die Eigenschaft IsSelected
auf true festgelegt. Für die Elemente, die nicht sichtbar sind (die Elemente, die virtualisiert werden), ist die Eigenschaft IsSelected
auf false festgelegt. Dies ist ein Problem, denn wenn ich alle Elemente in der Liste auswähle, erwarte ich, dass die IsSelected
-Eigenschaft für alle Elemente in der Sammlung auf "true" gesetzt ist.
Ich habe einen Beispielcode erstellt, um das Problem zu veranschaulichen:
MainWindow.xaml
%Vor%MainWindow.xaml.cs
%Vor%Wenn auf die Schaltfläche oben im Formular geklickt wird, werden die Elemente in der Auflistung gezählt, bei denen die Eigenschaft "IsSelected" auf "true" gesetzt ist. Sie können sehen, dass wenn Sie STRG + A drücken, um alle Elemente in der Liste auszuwählen, dass nur 19 Elemente ausgewählt sind.
Kennt jemand einen Weg um dieses Problem herum? Ich kann die Virtualisierung nicht ausschalten, weil ich eine schreckliche Leistung bekommen würde.
Ich denke, es ist deine Bindung. Im Grunde aktualisieren / binden Sie das ListViewItem, das nur die sichtbaren, nicht die gesamte Liste aktualisiert. Ich werde damit spielen, für jetzt können Sie in Code-Bindung analysieren ..
%Vor%Tags und Links wpf virtualization ui-virtualization