Я использовал следующий пост, чтобы реализовать сетку данных, привязанную к списку динамических объектов.
Привязать DynamicObject к DataGrid с автоматическим созданием столбцов?
Метод GetItemProperties ITypedList работает нормально, отображается сетка со всеми описанными мною столбцами.
Я использую настраиваемый дескриптор PropertyDescriptor и переопределяю методы GetValue и SetValue, как описано в приведенном выше сообщении, я также реализую методы TryGetMember и TrySetMember в динамических объектах.
так что в основном у меня есть ComplexObject: DynamicCobject с полем Dictionary и ComplexObjectCollection, реализующим ITypedList и IList.
Все это работает нормально, за исключением случаев, когда я привязываю itemsSource DataGrid к коллекции, в ячейках будет отображаться имя типа SimpleObject, и я действительно хочу реализовать шаблон для отображения значения свойства SimpleObject в текстовом блоке.
Я использовал всевозможные методы, чтобы попытаться получить базовый 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>
Любые предложения будут высоко ценится.
Спасибо
Киран