我有一个WPF Datagrid,我正在使用多个列。其中一列有些元素有时为null,当我尝试对此列进行排序时会导致异常。
列的定义类似于:
<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进行排序(我猜)并命中一个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有时仍然为null。我想知道尝试使用转换器,我设置SortMemberPath并让转换器返回string.empty为任何null元素,但无法让它工作。
我也尝试在这些列的绑定中添加“TargetNullValue = {x:Static sys:String.Empty}”,但它仍然不起作用。
任何意见/建议都将非常感谢。 谢谢, 将
答案 0 :(得分:9)
一般建议是:不要使用SortMemberPath。不仅仅是因为你遇到的问题。但也因为它们超声波。
而是使用ListCollectionView类的CustomSort属性。有关详细信息,请参阅"Improving Microsoft DataGrid CTP sorting performance"和"Improving Microsoft DataGrid CTP sorting performance - Part 2"。虽然它表示“改善性能”,但它也显示了如何解决您的问题。
希望这会有所帮助:)。