0

让我直说吧。我有一个带有几个设置列的 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]}" />

或类似的东西。单独显示和排序很好,但我遇到了一个问题,我需要强制将我的总数排到底部,我最终需要使用我在网上找到的一些代码才能使其正常工作(可在此处获得, 像宣传的那样工作)。但是,我发现他在这个新的自定义 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;
}

为了获得我需要能够反映和排序列表元素的所有信息?

4

1 回答 1

0

我很高兴看到您使用了我的示例(这是我的博客)。实现这一点的方法之一是为特定属性创建一个公共 getter。可能不是很方便。因为PropertyAccessor需要属性。或者可能是解析“属性[0]”首先获取属性的值,然后获取索引为[0]的元素

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

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

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

这是它的样子。稍后我将在博客上分享代码。你可以在我的博客上联系我。

于 2012-08-10T06:11:21.973 回答