Ich habe ein WPF DataGrid mit benutzerdefinierten Sortierung implementiert und es funktioniert gut. Ich muss einige der Datensätze in der Sammlung nach Oben und Unten sperren (Top Lock und Bottom Lock). Wenn also ein bestimmter Datensatz Top-gesperrt ist, sollte er der erste Datensatz in der Auflistung sein, unabhängig von einem Wert für die ausgewählte Spalte (dh ich möchte nicht die Zeilen sortieren, die Top-Locked und Bottom-Locked sind). Hier ist meine benutzerdefinierte Sortiermethode.WPF DataGrid benutzerdefinierte Sortierung mit einigen gesperrten Datensätzen
private void PerformLineCustomSort(DataGridColumn column)
{
ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;
column.SortDirection = direction;
ListCollectionView listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(Lines);
LineSorter lineSort = new LineSorter(direction, column);
listCollectionView.CustomSort = lineSort;
}
wo LineSorter meine benutzerdefinierte Sorter-Klasse ist mit IComparer Umsetzung. Das funktioniert gut. Jetzt möchte ich Top Lock und Bottom Lock auf die ListCollectionView anwenden. Ich habe den folgenden Code mit dem oben genannten versucht, aber es hat keine Änderung (dh Liste wird nur basierend auf der benutzerdefinierten Sortierspalte sortiert).
Gibt es eine Möglichkeit, dieses Szenario zu tun, oder muss ich die gesperrten Datensätze manuell entfernen und dann hinzufügen. Bitte schlagen Sie vor ..
können Sie die drei verschiedenen Sammlungen erstellen und verbinden.Eine Sammlung wird Top-Lock haben, zweite haben Bodenschloss und dritte Sammlung wird Ruhe alle Elemente haben. –
Ändern Sie Ihre 'LineSorter.Compare()' -Implementierung, um Objekte mit der höchsten Sperre immer als weniger als andere Objekte und Objekte mit der unteren Sperre als größer als andere Objekte zurückzugeben. Ich nehme an, dass es einen Grund gibt, warum du das nicht tun kannst? –