WPF Datagrid сортировка по столбцу с нулевыми элементами - PullRequest
7 голосов
/ 29 октября 2009

У меня есть таблица данных WPF, которую я использую с несколькими столбцами. В одном из столбцов есть некоторые элементы, которые иногда являются нулевыми, и это вызывает исключение, когда я пытаюсь отсортировать этот столбец.

Определения столбцов что-то вроде:

<dg:DataGrid.Columns>
  <dg:DataGridTextColumn Binding="{Binding MyObject.Field1}" Header="Field1" Width="Auto" />
  <dg:DataGridTextColumn Binding="{Binding MyObject.Field2.SubField}" Header="Field2" Width="Auto" />
</dg:DataGrid.Columns>

Если я сортирую по столбцу Field1, это нормально, если я сортирую по столбцу Field2 и нет нулевых объектов Field2, это нормально, но иногда это происходит, и DataGrid пытается сортировать по SubField (я полагаю) и нажимает нулевое исключение:

System.InvalidOperationException was unhandled
  Message=The SortDescriptions added are not valid. The probable solutions are to set the CanUserSort on the Column to false, or to use SortMemberPath property on the Column, or to handle the Sorting event on DataGrid.

Я попытался установить SortMemberPath на «MyObject.Field2.SubField», но, конечно, это не исправляет это, поскольку Field2 все еще иногда нулевой. Я задумался о том, чтобы попытаться использовать конвертер, в котором я установил SortMemberPath и у него есть конвертер, возвращающий string.empty для любых нулевых элементов, но не смог заставить его работать.

Я также попытался добавить «TargetNullValue = {x: Static sys: String.Empty}» в привязку этих столбцов, но это все равно не сработало.

Любые советы / предложения будут наиболее цениться. Спасибо, Будет

1 Ответ

9 голосов
/ 30 октября 2009

Общий совет: не используйте SortMemberPath. Не только из-за проблемы, которую вы только что встретили. Но еще и потому, что они очень медленные.

Вместо этого используйте свойство CustomSort класса ListCollectionView. Подробнее см. «Повышение производительности сортировки CTP Microsoft DataGrid» и «Повышение производительности сортировки CTP Microsoft DataGrid - часть 2» . Несмотря на то, что он говорит «улучшить производительность», он также показывает, как решить вашу проблему.

Надеюсь, это поможет:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...