WPF DataGrid对Virtualised属性进行排序

时间:2012-08-09 09:13:03

标签: c# wpf sorting datagrid

让我直截了当地说。我有一个带有几个设置列的DataGrid,如下所示:

<ctrl:DataGridWithFooter 
      FooterRowsCount="1" 
      x:Name="MyGrid" 
      CanUserDeleteRows="False" 
      CanUserSortColumns="True"
      AutoGenerateColumns="False" 
      ItemsSource="{Binding Path=Model, UpdateSourceTrigger=PropertyChanged}" 
      IsEnabled="{Binding Path=Idle}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Level" 
                                        Binding="{Binding Path=Name, Mode=OneWay}" />
<!--Snip-->
</ctrl:DataGridWithFooter>

和你期望的模型一样。但是,当应用程序运行时,我会遇到这样的情况:我将添加反映模型中列表中元素的新列,因此我得到了一个像

这样的绑定表达式
<DataGridTextColumn Binding="{Binding Path=Attributes[0]}" />

或类似的东西。单独显示和排序很好,但我遇到了一个问题,我需要强制我的总计行到底部,我最终需要使用我在网上找到的一些代码才能使其工作正常({{ 3}})。但是,我发现他在这个新的自定义DataGrid类中的排序类与我的列表元素绑定一起崩溃了。我的问题是,我将如何修改此构造函数

public PropertyAccessor(Type targetType, string property) {
    IsList_ = false;
    mTargetType = targetType;
mProperty = property;

    PropertyInfo propertyInfo =
        targetType.GetProperty(mProperty);

    mCanRead = propertyInfo.CanRead;
    mCanWrite = propertyInfo.CanWrite;
    mPropertyType = propertyInfo.PropertyType;
}

为了获得我需要能够反映出来并对列表元素进行排序的所有信息?

1 个答案:

答案 0 :(得分:0)

我很高兴看到你使用我的样本(这是我的博客)。实现此目的的一种方法是为特定属性创建公共getter。可能不太方便。 Cuz PropertyAccessor 需要属性。或者可能是解析“Attributes [0]”首先获取属性的值,然后获取索引为[0]的元素

此外,我决定为此任务创建另一个解决方案。主要思想是为datagrid创建一个包装器。通常它看起来像:

<StackPanel>
    <DataGrid/>
    <Footer/>
</StackPanel>

页脚是带文本框的网格(它可以包含多行)。此网格中的 DataGrid 的列同步。它还允许使用合并的单元格创建页脚。 在此解决方案中,您无需进行任何排序操作。它将由 DataGrid 完成。

Here is how it looks like。稍后我会在博客上分享这些代码。你可以让我联系我的博客。