我在XML文件中有数据,我在dataGrid中显示。 (WPF,C#,VisualStudio 2013)其中一列是数字数据。当我对列进行排序时,似乎它将其翻译为alpha而不是数字,但我已尝试将该列指定为数字...
dataGrid的XAML:
<DataGrid
ItemsSource="{Binding Path=Elements[Record]}"
AutoGenerateColumns="False" Height="Auto"
Name="dataGridRank"
VerticalAlignment="Top" HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn
Header="Name"
Width="*"
Binding="{Binding Element[Name].Value}"/>
<DataGridTextColumn
Header="Rank"
Width="*"
Binding="{Binding Element[Rank].Value, StringFormat={}{0:N}}"/>
</DataGrid.Columns>
</DataGrid>
XMLfile'scorts.xml':
<Ranks xmlns:dt="urn:schemas-microsoft-com:datatypes">
<Record>
<Name> A </Name>
<Rank dt:dt="number"> 85 </Rank>
</Record>
<Record>
<Name> C </Name>
<Rank dt:dt="number"> 105 </Rank>
</Record>
<Record>
<Name> B </Name>
<Rank dt:dt="number"> 95</Rank>
</Record>
</Ranks>
加载xml文件的C#代码:
var xml = XDocument.Load("Resources/ranks.xml").Root;
dataGridRanks.DataContext = xml;
当我点击列标题对Rank进行排序时,我想要的是:
A 85
B 95
C 105
or
C 105
B 95
A 85
我得到了什么:
C 105
A 85
B 95
or
B 95
A 85
C 105
我在使用和不使用Stringformat或dt:dt =“number”时都尝试过失败。我尝试过Stringformat = N以及StringFormat = {} {0:N}。
我错过了什么?看起来这应该很简单......
答案 0 :(得分:2)
由于Element value attribute
属于string
类型。所以列类型是字符串,因此字符串的默认比较器在这里使用。
并且StringFormat
在此不起作用,因为它不会更改绑定属性的类型。它仅用于在GUI上格式化字符串。
我建议在运行时创建匿名类型,并将其与Rank
属性类型为int
的类型绑定,以便使用int的默认比较器。
<强>代码强>:
var xml = XDocument.Load("database.xml").Root;
dataGridRank.ItemsSource = xml.Elements("Record")
.Select(e => new { Name = e.Element("Name").Value,
Rank = Convert.ToInt32(e.Element("Rank").Value) });
<强> XAML:强>
<DataGrid AutoGenerateColumns="False" Height="Auto"
Name="dataGridRank"
VerticalAlignment="Top" HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Name"
Width="*"
Binding="{Binding Name}"/>
<DataGridTextColumn Header="Rank"
Width="*"
Binding="{Binding Rank}"/>
</DataGrid.Columns>
</DataGrid>