次の投稿を使用して、動的オブジェクトのリストにバインドされたデータグリッドを実装しました
自動列生成を使用してDynamicObjectをDataGridにバインドしますか?
ITypedListメソッドのGetItemPropertiesは正常に機能し、説明したすべての列を含むグリッドが表示されます。
上記の投稿で説明されているように、カスタムPropertyDescriptorを使用して、GetValueメソッドとSetValueメソッドをオーバーライドします。また、動的オブジェクトにTryGetMemberメソッドとTrySetMemberメソッドを実装します。
つまり、基本的に、フィールドディクショナリを持つComplexObject:DynamicCobjectと、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>
任意の提案をいただければ幸いです。
ありがとう
キエラン