让我直截了当地说。我有一个带有几个设置列的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;
}
为了获得我需要能够反映出来并对列表元素进行排序的所有信息?
答案 0 :(得分:0)
我很高兴看到你使用我的样本(这是我的博客)。实现此目的的一种方法是为特定属性创建公共getter。可能不太方便。 Cuz PropertyAccessor 需要属性。或者可能是解析“Attributes [0]”首先获取属性的值,然后获取索引为[0]的元素
此外,我决定为此任务创建另一个解决方案。主要思想是为datagrid创建一个包装器。通常它看起来像:
<StackPanel>
<DataGrid/>
<Footer/>
</StackPanel>
页脚是带文本框的网格(它可以包含多行)。此网格中的列与 DataGrid 的列同步。它还允许使用合并的单元格创建页脚。 在此解决方案中,您无需进行任何排序操作。它将由 DataGrid 完成。
Here is how it looks like。稍后我会在博客上分享这些代码。你可以让我联系我的博客。