问题
I want a specific template for all my columns in DataGrid. The usual method is I will replicate the entire XAML for DataTemplate multiple times in the DataGrid in each of the Column.
Is there any way I can define the CellTemplate globally as a resource and then just pass the the "Path" property of "Binding" to it, so that it displays the correct item from the DataContext ?
Is this possible ?
回答1:
Create DataTemplate in App.Xaml file with key/name.
<DataTemplate x:Name="myTemplate" TargetType="sdk:DataGridTemplateColumn">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding FirstName}" BorderThickness="0"/>
<TextBox Text="{Binding LastName}" BorderThickness="0"/>
</StackPanel>
</DataTemplate>
Now you can use this template in DataGrid like
<sdk:DataGridTemplateColumn Header="Name" CellTemplate={StaticResource myTemplate}>
OR
You can to pass Binding Path name in code behind like...
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;
Hope this will help.
来源:https://stackoverflow.com/questions/8354650/can-i-define-celltemplate-of-datagrid-as-a-resource-so-that-it-can-be-reused-in