Могу ли я определить CellTemplate DataGrid в качестве ресурса, чтобы его можно было повторно использовать в нескольких столбцах? - PullRequest
5 голосов
/ 02 декабря 2011

Я хочу определенный шаблон для всех моих столбцов в DataGrid. Обычный метод - я повторю весь XAML для DataTemplate несколько раз в DataGrid в каждом столбце.

Можно ли как-то определить глобальный шаблон CellTemplate как ресурс, а затем просто передать ему свойство "Path" объекта "Binding", чтобы он отображал правильный элемент из DataContext?

Возможно ли это?

1 Ответ

6 голосов
/ 02 декабря 2011

Создание DataTemplate в файле App.Xaml с ключом / именем.

 <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}>

ИЛИ
Вы можете передатьИмя пути привязки в коде позади, как ...

        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;

Надеюсь, это поможет.

...