我正在使用WPF中的DataGrid与几个十进制列.我最近将绑定属性更改为十进制?现在这些列无法通过单击标题进行排序(就像我的其他列一样).但是,我仍然可以使用代码隐藏中的方法对它们进行排序.有人知道是否可以对小数进行排序?单击标题列或其后面的原因是什么,如果不可能?这是我的相关代码:
有问题的几列(该属性附加到DataGrid的行为.启用/禁用行为没有区别):
[Column("PPAvg", 7)]
public decimal? ProjectedPointsAvg { get; set; }
[Column("PPHi", 8)]
public decimal? ProjectedPointsHi { get; set; }
[Column("PPLo", 9)]
public decimal? ProjectedPointsLo { get; set; }
DataGrid本身:
<DataGrid x:Name="poolDataGrid"
Grid.Row="1"
CanUserAddRows="False"
IsReadOnly="True"
MouseDoubleClick="poolDataGrid_MouseDoubleClick">
<i:Interaction.Behaviors>
<local:ColumnHeaderBehavior />
</i:Interaction.Behaviors>
</DataGrid>
我仍然可以使用类似的东西通过代码隐藏排序:
var col = poolDataGrid.Columns.SingleOrDefault(c => c is DataGridTextColumn && c.Header.ToString() == "PPHi");
poolDataGrid.Items.SortDescriptions.Add(new SortDescription(col.SortMemberPath, ListSortDirection.Descending));
不幸的是,我没有太多要补充的内容.如果有人可以帮我解决这个问题,我将不胜感激.
解决方法:
您可以使用可空属性对DataGrid进行排序,但您需要自己定义所有列.所以它应该是这样的:
<DataGrid Name="poolDataGrid" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Coulumn1" Binding="{Binding ProjectedPointsAvg }"/>
<DataGridTextColumn Header="Coulumn2" Binding="{Binding ProjectedPointsHi }" />
<DataGridTextColumn Header="Coulumn3" Binding="{Binding ProjectedPointsLo}" />
</DataGrid.Columns>
</DataGrid>
为什么AutoGenerateColumns存在问题?
似乎只为类型为可绑定类型的属性自动生成列.
更多:http://vaultofthoughts.net/IsBindableTypeMysteryMethod.aspx
测试:VS2012 .NET 4.5