C#/WPF:ListView排序:对双精度/小数排序时出现NullReference异常,但不适用于字符串?

C#/WPF:ListView排序:对双精度/小数排序时出现NullReference异常,但不适用于字符串?,c#,wpf,sorting,listview,C#,Wpf,Sorting,Listview,有人知道我为什么在下面一行得到一个NullReference表达式异常吗: var field = (string)((Binding)((GridViewColumnHeader)e.OriginalSource).Column.DisplayMemberBinding).Path.Path; 使用此示例时:(基于:) 非常感谢 干杯, 约瑟夫 PS:这只发生在我对双精度/小数排序时,而不是对字符串排序时 编辑: 我发现了问题。这就是我的XAML的样子: <

有人知道我为什么在下面一行得到一个NullReference表达式异常吗:

var field = (string)((Binding)((GridViewColumnHeader)e.OriginalSource).Column.DisplayMemberBinding).Path.Path;  
使用此示例时:(基于:)

非常感谢

干杯, 约瑟夫

PS:这只发生在我对双精度/小数排序时,而不是对字符串排序时

编辑:

我发现了问题。这就是我的XAML的样子:

            <GridViewColumn Header="Double">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding TotalValues, Mode=OneWay, StringFormat=\{0:0\'0.00\}, Converter={StaticResource GridValueConverter}}" TextAlignment="Right" Width="auto"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Comments" DisplayMemberBinding="{Binding Path=Comments, Mode=OneWay}" Width="auto"/>


这里的问题是,我试图获取DisplayMemberBinding,但对于double,我使用的是DataTemplate。。有人知道如何更改该行以使其适用于每种列类型吗?

乍一看,该行似乎只适用于字符串,因为您在分配之前将其强制转换为字符串。您可以这样做:

object field = ((Binding)((GridViewColumnHeader)e.OriginalSource).Column.DisplayMemberBinding).Path.Path;
不会引发任何空引用异常(当值不是字符串时由(字符串)转换引起)。如果使用as进行强制转换,则在强制转换时不会出现异常,但这对值类型不起作用(并且仍然只对字符串起作用),即:

因此,将field作为对象,可以使用field.GetType()与typeof(string)、typeof(double)和,。。。弄清楚它是什么类型的,然后用它做任何你需要做的事情

var field = (((Binding)((GridViewColumnHeader)e.OriginalSource).Column.DisplayMemberBinding).Path.Path as string);