0

DataGrid次のスニペットを使用してプログラムで列を追加することにより、を構築しました。

var check = new FrameworkElementFactory(typeof(CheckBox), "chkBxDetail");
dgDetalle.Columns.Add(new DataGridTemplateColumn() { CellTemplate = 
                      new DataTemplate() { VisualTree = check } });
for (int i = 0; i < 4; i++)
{
    DataGridTextColumn textColumn = new DataGridTextColumn();
    textColumn.Binding = new Binding(string.Format("[{0}]", i));
    dgDetalle.Columns.Add(textColumn);
}

グリッド上のチェックボックスのチェックされた/チェックされていないステータスを知るにはどうすればよいですか?

UPDATEバインディング を使用できません

4

1 に答える 1

0

ついにできた...

DataGridこのスニペットを使用して作成しました:

var check = new FrameworkElementFactory(typeof(CheckBox));

dgDetalle.Columns.Add(new DataGridTemplateColumn()
    {
        CellTemplate = new DataTemplate() { VisualTree = check }
    });

for (int i = 0; i < 4; i++)
{
    DataGridTextColumn textColumn = new DataGridTextColumn();
    textColumn.Binding = new Binding(string.Format("[{0}]", i));
    dgDetalle.Columns.Add(textColumn);
}

次に、選択したアイテムのデータを で表示するスニペットを作成しましたMessageBox

string testValues = "";

for (int i = 0; i < dgDetalle.Items.Count; i++)
{
    DataGridRow row = (DataGridRow)dgDetalle.ItemContainerGenerator.ContainerFromIndex(i);
    FrameworkElement cellContent = dgDetalle.Columns[0].GetCellContent(row);
    CheckBox checkBox = VisualTreeHelper.GetChild(cellContent, 0) as CheckBox;
    if (checkBox != null && (checkBox.IsChecked ?? false))
    {
        List<string> item = (List<string>)dgDetalle.Items[i];
        foreach (var t in item)
        {
            testValues += t;
        }
    }
}

MessageBox.Show(testValues);

要約する:

  1. を使用して行を取得しますItemContainerGenerator
  2. から特定の列を取得し、DataGridそれを汎用プレゼンテーション オブジェクトとして取得します ( FrameworkElement) 。
  3. を使用してコンテンツを取得しますVisualTreeHelperCheckBox最初のスニペットで I've createdを取得したことに注意してください
  4. 選択したアイテムを処理する

それが誰かに役立つことを願っています...!

于 2012-05-09T14:18:26.427 に答える