Как узнать статус отмеченных / незарегистрированных флажков в сетке?
Я построил 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);
}
Как узнать статус отмеченных / незарегистрированных флажков в сетке?
ОБНОВЛЕНИЕ Я не могу использовать привязку
1 ответ
Решение
Наконец то я понял...
Я создал 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);
Подвести итоги:
- Получить строку с помощью
ItemContainerGenerator
- Получить конкретный столбец из
DataGrid
и принять его как общий объект презентации (FrameworkElement
) - Получить контент с помощью
VisualTreeHelper
, Обратите внимание, что я получилCheckBox
Я создал первый фрагмент - Обработать выбранный элемент
Надеюсь, это кому-нибудь поможет...!