Problemas vinculando a um o conteúdo de um DataGridCell WPF em XAML
Eu usei o seguinte post para implementar um datagrid ligado a uma lista de objetos dinâmicos
Vinculando DynamicObject a um DataGrid com geração automática de colunas?
O método ITypedList GetItemProperties funciona bem, uma grade é exibida com todas as colunas que descrevi.
Eu uso um PropertyDescriptor personalizado e substituir os métodos GetValue e SetValue conforme descrito na postagem acima, eu também implementar os métodos TryGetMember e TrySetMember nos objetos dinâmicos.
Então, basicamente, eu tenho um objeto ComplexObject: DynamicCobject com um dicionário de campo e um ComplexObjectCollection implementando ITypedList e IList.
Isso tudo funciona bem, exceto quando eu ligar o itemsSource do DataGrid para a coleção, as células irão mostrar o nome do tipo SimpleObject e eu realmente quero implementar um modelo para mostrar a propriedade Value do SimpleObject em um bloco de texto.
Eu usei todos os tipos de métodos para tentar obter o SimpleObject subjacente, mas nada funciona e eu sempre obtenho o objeto ComplexObject para a linha. Eu estou usando colunas autogeradas e isso sempre parece produzir uma coluna de texto, isso pode ser o problema, mas por que não posso ainda obter o SimpleObject subjacente de algum lugar nas propriedades da célula?
Abaixo seria a minha solução ideal, mas isso não funciona.
<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>
Qualquer sugestão será muito bem-vinda.
obrigado
Kieran