c# – 排序十进制类型的列? (可为空)在WPF DataGrid中

我正在使用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

上一篇:树和二叉树


下一篇:二叉排序树(BST) 的插入,删除,查询