3

我正在尝试以编程方式将列添加到我的 DataGrid 中,因为它们直到运行时才知道。我已经完成了大部分工作,并且从后面的代码中添加一个“正常”列不是问题。但是,我现在尝试添加的列有一个 DataTemplate。这是 XAML:

<DataGridTemplateColumn Header="{Binding colHeader}">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Border BorderBrush="{Binding BorderColour}" BorderThickness="2">
                <TextBlock Text="{Binding TextInfo}" />
            </Border>
        </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

通常我会使用这样的东西来创建一个列来添加到网格中:

Private Function AddColumn(colHeader As String, colBinding As String) As DataGridColumn
    Dim textColumn As New DataGridTextColumn()
    textColumn.Header = colHeader
    textColumn.Binding = New Binding(colBinding)
    Return textColumn
End Sub

但我对如何添加更复杂的 XAML 感到困惑。有什么建议么?

谢谢你的帮助!

4

2 回答 2

5

使用属性在资源字典中定义列的 DataTemplate,x:Key然后在后面的代码中访问它以设置单元格模板。

<DataTemplate x:Key="your_data_template">
    <Border BorderBrush="{Binding BorderColour}" BorderThickness="2">
        <TextBlock Text="{Binding TextInfo}" />
    </Border>
</DataTemplate>

然后在后面的代码中

textColumn.CellTemplate = Application.Current.FindResource("your_data_template") as DataTemplate
于 2012-12-04T11:17:56.943 回答
0

参考链接:http: //blogs.msdn.com/b/scmorris/archive/2008/04/14/defining-silverlight-datagrid-columns-at-runtime.aspx

代码片段来自上面的链接:(这是一种方法。该链接中还解释了其他方式)

xml:

<UserControl.Resources>
<local:DateTimeConverter x:Key="DateConverter" />

<DataTemplate x:Key="myCellTemplate">
    <TextBlock 
        Text="{Binding Birthday, 
        Converter={StaticResource DateConverter}}" 
        Margin="4"/>
</DataTemplate>

<DataTemplate x:Key="myCellEditingTemplate">
    <basics:DatePicker 
        SelectedDate="{Binding Birthday, Mode=TwoWay}" />
</DataTemplate>

代码背后:

DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Birthday";
templateColumn.CellTemplate = (DataTemplate)Resources["myCellTemplate"];
templateColumn.CellEditingTemplate = 
                   (DataTemplate)Resources["myCellEditingTemplate"];
targetDataGrid.Columns.Add(templateColumn);
于 2012-12-04T12:18:04.840 回答