WPF ListView - Сортировка по вложенным свойствам
-
19-09-2019 - |
Вопрос
Я недавно наткнулся на проблему, где WPF ListView
Контроль, кажется, ограничивает способность сортировать свои элементы. В частности, у меня много проблем, пытаясь получить SortDescription
Признать вложенные свойства (свойства свойств).
Для прямой сортировки по пропрее, следующая строка должна выполнять задание:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty",
ListSortDirection.Ascending));
И действительно, это хорошо работает для меня. Однако, потому что ItemSource
для моего ListView
это (сильно типичный) DataTable
, некоторые из столбцов связаны с вложенными свойствами ряда (т.е. Row.OtherTableRow.SubProperty
Стиль пути привязки) - Это способ, которым наборы данных ADO.NET работают для иерархических баз данных.
Я хотел бы сделать что -то вроде этого:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty",
ListSortDirection.Ascending));
Но, к сожалению, эта линия бросает ArgumentException
:
Тип «Заказ» не имеет свойства с именем «row. [Id]», поэтому не может сортировать сбор данных.
Как ни странно, у меня нет проблем, связанных с вложенными свойствами. Действительно, поля отлично хорошо отображаются в ListView
... не добавление PropertyGroupDescription
к listView.GroupDescriptions
Дайте мне проблемы с вложенными свойствами - это только SortDescriptions
!
Это, но ограничение WPF/ ListView
контроль? Есть ли способ получить поддержку в рамках рамки, или мне там не повезет? Если бы я, к сожалению, и это несоответствие неизбежно, я бы очень признателен, если бы кто -то мог предложить взлом или обходной путь для этого сценария вложенных свойств. Я уже пробовал несколько идей, но все с минимальным успехом.
Примечание: я понимаю, что ORM вполне может решить мои проблемы, но я боюсь, что это совсем не возможно для текущего проекта, над которым я работаю. Простые наборы данных ADO.NET должны будут делать.
Решение
Согласно Windows Presentation Foundation Unlident (Adam Nathan), вы можете представить представление по умолчанию в ListCollectionView и установить пользовательскую реализацию IcomParer в свой свойство таможни.