我正在尝试以编程方式向我的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感到难过。有什么建议吗?
感谢您的帮助!
答案 0 :(得分:5)
在具有x:Key
属性的资源字典中定义列的DataTemplate,然后在后面的代码中访问它以设置单元格模板。
<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
答案 1 :(得分:0)
代码段来自上面的链接:(这是这样做的一种方式。其他方式也在该链接中解释)
的Xaml:
<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);