Xaml中的动态列绑定

时间:2009-11-18 02:12:23

标签: xaml silverlight dynamic

这是来自早期帖子(here)的后续问题。

我将一些'标题'信息存储为: Dictionary<string,string> - 第一个字符串表示字段名称,第二个字符串表示我想要显示的标题。

我有一组动态数据存储为: Dictionary<string, object> - 其中string是字段名称。

我在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 个答案:

答案 0 :(得分:2)

我使用的方法遵循此伪代码的模式

columns = New DynamicTypeColumnList()
columns.Add(New DynamicTypeColumn("Name", GetType(String)))
dynamicType = DynamicTypeHelper.GetDynamicType(columns)

DynamicTypeHelper.GetDynamicType()生成一个具有简单属性的类型。有关如何生成此类型

的详细信息,请参阅this post

然后要实际使用该类型,请执行以下操作

Dim rows as List(Of DynamicItem)
Dim row As DynamicItem = CType(Activator.CreateInstance(dynamicType), DynamicItem)
row("Name") = "Foo"
rows.Add(row)
dataGrid.DataContext = rows