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