Каков код для 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