我使用以下帖子来实现绑定到动态对象列表的数据网格
将 DynamicObject 绑定到具有自动列生成的 DataGrid?
ITypedList 方法 GetItemProperties 工作正常,一个网格显示了我描述的所有列。
我使用自定义的 PropertyDescriptor 并覆盖上面帖子中描述的 GetValue 和 SetValue 方法,我还在动态对象中实现了 TryGetMember 和 TrySetMember 方法。
所以基本上我有一个 ComplexObject:DynamicCobject,其中包含一个字段 Dictionary 和一个实现 ITypedList 和 IList 的 ComplexObjectCollection。
这一切都很好,除了当我将 DataGrid 的 itemsSource 绑定到集合时,单元格将显示 SimpleObject 类型名称,我实际上想要实现一个模板来在文本块中显示 SimpleObject 的属性 Value。
我使用了各种方法来尝试获取底层的 SimpleObject,但没有任何效果,而且我总是得到该行的 ComplexObject。我正在使用自动生成的列,这似乎总是会产生一个文本列,这可能是问题所在,但为什么我仍然不能从单元格属性的某个地方获取底层的 SimpleObject?
下面将是我理想的解决方案,但这不起作用。
<Grid>
<Grid.Resources>
<DataTemplate x:Key="DefaultNodeTempate">
<ContentControl Content="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=Content}">
<ContentControl.Resources>
<DataTemplate DataType="local:SimpleObjectType">
<TextBlock Text="{Binding Value}" />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</Grid.Resources>
<DataGrid ItemsSource="{Binding ElementName=mainWin, Path=DynamicObjects}">
<DataGrid.Resources>
<Style TargetType="DataGridCell">
<Setter Property="ContentTemplate" Value="{StaticResource DefaultNodeTempate}" />
</Style>
</DataGrid.Resources>
</DataGrid>
</Grid>
任何建议将不胜感激。
谢谢
基兰