11

私はDataGridWPFを持っています。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特定のクリックが発生するたびに 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 に設定します。-OR-
  • DataGridCell.ContentTemplate必要なボタンやその他の項目を含む DataTemplate に設定します。-OR-
  • 新しいボタンを保持するためのプレースホルダー パネルを列DataTemplateに含め、このパネルのビジュアル ツリーを で検索し、Nameボタンを追加します。

セルを見つける必要のない代替アプローチは次のとおりです。

  1. ObservableCollection<T>ボタンを作成するための情報を提供するビュー モデルにプロパティを含めます。
  2. DataTemplateインクルードには、このItemsControlプロパティを参照DataTemplateし、タイプ外の正しいボタンを作成できる がありますT
  3. ボタンを追加したいときは、ObservableCollectionプロパティに項目を追加するだけです
于 2009-11-18T18:42:37.773 に答える