2009-07-23 1 views
1

Я недавно наткнулся на проблему, когда элемент управления WPF ListView, судя по всему, ограничивает возможность сортировки своих элементов. В частности, у меня возникают большие проблемы с попыткой получить SortDescription для распознавания вложенных свойств (свойств свойств).WPF ListView - сортировка по вложенным свойствам

Для прямого вперед сортировки по propreties, следующая строка должна сделать работу:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty", 
    ListSortDirection.Ascending)); 

И это действительно работает хорошо для меня. Однако, поскольку ItemSource для моего ListView является (строго типизированным) DataTable, некоторые из столбцов привязаны к вложенным свойствам строки (т. Е. Row.OtherTableRow.SubProperty стиль пути связывания) - это способ работы ADO.NET DataSets для иерархических баз данных.

То, что я хотел бы сделать что-то вроде этого:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty", 
    ListSortDirection.Ascending)); 

Но, к сожалению, линия бросает ArgumentException:.

типа 'Заказы' не имеет свойство с именем «Row [ID ] ', поэтому не может сортировать сбор данных.

Как ни странно, у меня нет проблем с привязкой к вложенным свойствам. Действительно, поля отлично отображаются в ListView ... Также добавление PropertyGroupDescription в listView.GroupDescriptions не вызывает проблем с вложенными свойствами - это всего лишь SortDescriptions!

Это ограничение только WPF/ListView? Есть ли способ получить поддержку в рамках структуры, или мне не повезло? Если я к сожалению, и эта несогласованность неизбежна, я бы очень признателен, если кто-то может предложить взломать или обходной путь для этого сценария вложенных свойств. Я уже пробовал несколько идей, но все с минимальным успехом.

Примечание: Я понимаю, что ORM может решить мои проблемы, но я боюсь, что это не совсем возможно для текущего проекта, над которым я работаю. Простые ADO.NET DataSets должны будут делать.

ответ

1

В соответствии с Windows Presentation Foundation Unleased (Adam Nathan) вы можете отобразить представление по умолчанию в ListCollectionView и установить пользовательскую реализацию IComparer для своего свойства CustomSort.

+0

Приветствия. Я могу просто взглянуть на эту книгу, если она хорошо описывает другие расширенные сценарии. :) – Noldorin