我想在DataGrid中为我的所有列创建一个特定的模板。通常的方法是我将在每个Column的DataGrid中多次复制整个XAML for DataTemplate。
有没有什么办法可以将CellTemplate全局定义为资源,然后只需将“Binding”的“Path”属性传递给它,以便它从DataContext中显示正确的项目?
这可能吗?
答案 0 :(得分:6)
使用键/名称在App.Xaml文件中创建DataTemplate。
<DataTemplate x:Name="myTemplate" TargetType="sdk:DataGridTemplateColumn">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding FirstName}" BorderThickness="0"/>
<TextBox Text="{Binding LastName}" BorderThickness="0"/>
</StackPanel>
</DataTemplate>
现在您可以在DataGrid中使用此模板,如
<sdk:DataGridTemplateColumn Header="Name" CellTemplate={StaticResource myTemplate}>
OR
您可以在代码后面传递Binding Path名称,如...
string colPath = "FirstName";
DataGrid grid = new DataGrid();
grid.ItemsSource = myViewModel.EmpCollection;
DataGridTemplateColumn column = new DataGridTemplateColumn();
DataTemplate itemTemplate = (DataTemplate)XamlReader.Load("<DataTemplate xmlns=\"http://schemas.microsoft.com/client/2007\"> <ContentPresenter Content=\"{Binding Path=" + colPath + "}\" /></DataTemplate>");
column.CellTemplate = itemTemplate;
grid.Columns[0] = column;
希望这会有所帮助。