Каков код для datagridtemplatecolumn и как его использовать?

У меня есть DataGrid в WPF. И я пытаюсь добавить Button в определенные ячейки сетки, после того как она привязана к определенному 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 всякий раз, когда происходит конкретный клик. Любая помощь будет высоко оценена.

Ответ 1

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

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 во время выполнения. Надеюсь, это поможет!

Ответ 2

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

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

  • Найдите DataGridCell с помощью DataGridColumn.GetCellContent
  • Используйте VisualTreeHelper для сканирования визуального дерева на DataGridCell

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

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

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

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