wpfdatagridsilverlight-4.0celltemplate

Can I define CellTemplate of DataGrid as a Resource so that it can be reused in multiple columns?


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 ?


Solution

  • 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.