Что такое код для datagridtemplatecolumn и как его использовать? - PullRequest
11 голосов
/ 18 ноября 2009

У меня есть DataGrid в WPF. И я пытаюсь добавить Button s к определенным ячейкам сетки, после того, как она привязана к определенному ItemsSource. Я попытался сделать это в xaml, как это:

<dg:DataGridTemplateColumn x:Name="R1" CanUserReorder="False" IsReadOnly="False">             
    <dg:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <awc:ImageButton Content="Edit" Name="btnEdit" Visibility="Collapsed"/>
        </DataTemplate>
    </dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>

Однако я хочу знать, как я могу сделать это в приведенном ниже коде. Мне нужно это, чтобы я мог поместить Button с, когда происходит определенный щелчок. Любая помощь будет высоко оценена.

Ответы [ 2 ]

26 голосов
/ 18 ноября 2009

используйте это:

DataGridTemplateColumn col1 = new DataGridTemplateColumn();
col1.Header = "MyHeader";
FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(CheckBox));
Binding b1 = new Binding("IsSelected");
b1.Mode = BindingMode.TwoWay;
factory1.SetValue(CheckBox.IsCheckedProperty, b1);
factory1.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(chkSelect_Checked));
DataTemplate cellTemplate1 = new DataTemplate();
cellTemplate1.VisualTree = factory1;
col1.CellTemplate = cellTemplate1;
dgTransportReqsts.DataGrid.Columns.Add(col1);

Я использовал это, чтобы добавить CheckBox в мой DataGridTemplateColumn во время выполнения. Надеюсь, это поможет !!

3 голосов
/ 18 ноября 2009

Ответ Anurag будет работать очень хорошо для вас, если вы хотите добавить кнопки до создания экземпляра сетки , в частности, перед добавлением столбца в сетку.

Если вы хотите добавить кнопку в ячейку сетки после того, как сетка уже построена , вы можете сделать это, внеся изменения в объект DataGridCell. Сначала вы должны найти его:

  1. Найдите DataGridCell, используя DataGridColumn.GetCellContent
  2. Используйте VisualTreeHelper для сканирования визуального дерева до DataGridCell

Как только это будет сделано, есть несколько способов добавить кнопку в DataGridCell, в зависимости от того, чего вы пытаетесь достичь:

  • Установите DataGridCell.Template на ControlTemplate, содержащий кнопки и другой стиль, который вы пожелаете, -OR-
  • Установите DataGridCell.ContentTemplate на шаблон данных, содержащий кнопки и другие нужные элементы, -ИЛИ-
  • У вашего столбца DataTemplate есть панель-заполнитель для хранения новых кнопок, выполните поиск по дереву визуальных элементов для этой панели по Name и добавьте к ней свою кнопку.

Альтернативный подход, который не требует поиска ячейки:

  1. Включите свойство ObservableCollection<T> в модель представления, которая предоставляет информацию для создания кнопок
  2. В вашем DataTemplate есть ItemsControl, который ссылается на это свойство, и DataTemplate, который может создать правильную кнопку из типа T
  3. Если вы хотите добавить кнопку, просто добавьте элемент в свойство ObservableCollection
...