11

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在发生特定点击时我可以放置 s。任何帮助将不胜感激。

4

2 回答 2

28

用这个:

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);

我用它在运行时在我的 DataGridTemplateColumn 中添加 CheckBox。希望这可以帮助!!

于 2009-11-18T12:06:05.987 回答
3

如果您想在实例化网格之前添加按钮,特别是在将列添加到网格之前, Anurag 的答案对您来说非常有用。

如果您想在网格已经构建后将按钮添加到网格单元格,您可以通过更改 DataGridCell 对象来实现。首先你必须找到它:

  1. DataGridCell通过使用查找DataGridColumn.GetCellContent
  2. 用于VisualTreeHelper向上扫描可视化树到DataGridCell

完成此操作后,有多种方法可以将按钮添加到 DataGridCell,具体取决于您要实现的目标:

  • 设置DataGridCell.Template为包含您想要的按钮和其他样式的 ControlTemplate,-或-
  • 设置DataGridCell.ContentTemplate为包含所需按钮和其他项目的 DataTemplate,-或-
  • 让您的列DataTemplate包含一个占位符面板来保存新按钮,通过 搜索此面板的可视化树Name,然后将您的按钮添加到其中。

不需要找到单元格的另一种方法是:

  1. 在您的视图模型中包含一个ObservableCollection<T>属性,该属性提供创建按钮的信息
  2. 在您的DataTemplate包含一个ItemsControl引用此属性并具有一个DataTemplate可以创建正确的按钮类型的T
  3. 当你想添加一个按钮时,只需在ObservableCollection属性中添加一个项目
于 2009-11-18T18:42:37.773 回答