Динамическая привязка столбцов в Xaml
Это вопрос из предыдущего поста ( здесь).
У меня есть некоторая информация заголовка, хранящаяся как:Dictionary<string,string>
- где первая строка представляет имя поля, а вторая - отображаемый заголовок.
У меня есть набор динамических данных, которые хранятся как:Dictionary<string, object>
где строка - это имя поля.
Я связываю это в xaml как:
<data:DataGrid Name="_dataGrid" AutoGenerateColumns="True" IsReadOnly="False" Margin="5" Height="200">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Forename" CanUserSort="True" SortMemberPath="Forename"
Binding="{Binding Converter={StaticResource RowIndexConverter},
ConverterParameter=Forename}"/>
<data:DataGridTextColumn Header="Surname" CanUserSort="True" SortMemberPath="Surname"
Binding="{Binding Converter={StaticResource RowIndexConverter},
ConverterParameter=Surname}"/>
<data:DataGridTextColumn Header="Age" CanUserSort="True" SortMemberPath="Age"
Binding="{Binding Converter={StaticResource RowIndexConverter},
ConverterParameter=Age}"/>
<data:DataGridTextColumn Header="Shoesize" CanUserSort="True" SortMemberPath="Shoesize"
Binding="{Binding Converter={StaticResource RowIndexConverter},
ConverterParameter=Shoesize}"/>
</data:DataGrid.Columns>
</data:DataGrid>
Проблема 1 Я хочу автоматически сгенерировать эти столбцы (используя предоставленную информацию заголовка)
Проблема 2 Я хочу, чтобы столбцы были сгенерированы в зависимости от типа данных (т. Е. Boolean = checkbox)
Проблема 3 В идеале я также хотел бы указать, должна ли кнопка существовать в первом столбце или нет (то есть кнопка редактирования / просмотра) посредством привязки данных
1 ответ
Я использовал подход, который следует шаблону этого псевдокода
columns = New DynamicTypeColumnList()
columns.Add(New DynamicTypeColumn("Name", GetType(String)))
dynamicType = DynamicTypeHelper.GetDynamicType(columns)
DynamicTypeHelper.GetDynamicType() генерирует тип с простыми свойствами. Смотрите этот пост для получения подробной информации о том, как создать такой тип
Затем, чтобы действительно использовать тип, сделайте что-то вроде этого
Dim rows as List(Of DynamicItem)
Dim row As DynamicItem = CType(Activator.CreateInstance(dynamicType), DynamicItem)
row("Name") = "Foo"
rows.Add(row)
dataGrid.DataContext = rows