如何在WPF数据网格中将XML文件中的文本排序为数字?

如何在WPF数据网格中将XML文件中的文本排序为数字?,wpf,sorting,datagrid,Wpf,Sorting,Datagrid,我的DataGrid的内容(例如,产品和价格)是从XML文件加载的,当按DataGrid排序时,所有内容都被视为文本 如何告诉DataGrid在排序时将价格视为数字?谢谢 这里是相关的XAML(没有代码隐藏)。我想将长度排序为数字: <DataGridTemplateColumn Header="Length" SortMemberPath="Length" Width="100"> <DataGridTemplateColumn.CellTe

我的DataGrid的内容(例如,产品和价格)是从XML文件加载的,当按DataGrid排序时,所有内容都被视为文本

如何告诉DataGrid在排序时将价格视为数字?谢谢

这里是相关的XAML(没有代码隐藏)。我想将长度排序为数字:

 <DataGridTemplateColumn Header="Length" SortMemberPath="Length" Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock TextAlignment="Right" VerticalAlignment="Center"  Text="{Binding XPath=Length}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>


如果没有代码,这只是一个猜测,但我假设您正在对一个对象进行xml反序列化,该对象被放入一个列表中,然后您的datagrid被绑定到该列表。如果将list类中的price数据字段设置为int,则datagrid会将其视为一个数字。

您可以向绑定中添加一个转换器。 步骤1:创建转换器类

[ValueConversion(typeof(string), typeof(int))]
public class StringToIntConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Int32.Parse(value.ToString());
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value.ToString();
    }
}
一点验证可能是可取的,但这只是一个初步的例子

步骤2:实例化转换器。确保将名称空间声明添加到Xaml中

<Window.Resources>
    <StringToIntConverter x:Name="stringToInt"/>   
</Window.Resources>

第三步:使用它

<DataGridTemplateColumn Header="Length" SortMemberPath="Length" Width="100">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock TextAlignment="Right" VerticalAlignment="Center"  Text="{Binding XPath=Length, Converter={StaticResource stringToInt}}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


显示代码总比只显示文字要好。不,代码隐藏中没有任何序列化。正如添加到问题中的那样,XAML文件中的所有内容都是声明性的。