次の投稿を使用して、動的オブジェクトのリストにバインドされたデータグリッドを実装しました
自動列生成を使用して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>
任意の提案をいただければ幸いです。
ありがとう
キエラン