WPF数据表格在具有空元素的列上排序

7

我有一个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列排序,并且没有任何null的Field2对象,则也很好。但有时候存在null的Field2对象,DataGrid尝试对SubField进行排序(我猜是这样),然后就会出现null异常。
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
你可以通过使用转换器或在获取数据时实例化对象(如果它为空)来确保对象永远不会为空,从而解决这个问题。 - user661573
1个回答

9

谢谢Anvaka,非常感谢你提供的链接,我已实现了上述自定义排序方法,即使是相对较小的数据量,我的网格的排序速度也明显加快了。唯一的缺点是我失去了进行多重排序的能力,因为任何新的自定义排序将覆盖之前的排序。我正在尝试找到一种方法来解决这个问题,或许可以发一个新问题来询问! - WillH
谢谢,这也是我的问题!http://stackoverflow.com/questions/4086234/wpf-toolkit-datagrid-sorting-with-null-values - Falcon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接