Как определить значение выбранной ячейки в DataGrid? (WPF)
Как я могу определить SelectedCell
"s Value
В DataGrid
? (WPF)
мой DataGrid
имеет 9 колон и 5 рядов, и я хочу знать, Value
кликаемой строки [0] Value
,
Я использовал этот код в форме Windows:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
var a = dataGridView1[e.ColumnIndex, e.RowIndex].Value;
}
но я не знаю эквивалентного кода в wpf.
5 ответов
Вы должны использовать событие DataGrid_SelectedCellsChanged.
private void dataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
foreach (var item in e.AddedCells)
{
var col = item.Column as DataGridColumn;
var fc = col.GetCellContent(item.Item);
if (fc is CheckBox)
{
Debug.WriteLine("Values" + (fc as CheckBox).IsChecked);
}
else if(fc is TextBlock)
{
Debug.WriteLine("Values" + (fc as TextBlock).Text);
}
//// Like this for all available types of cells
}
}
НТН
Определение значения выбранной ячейки - это скорее вещь WinForms. WPF предназначен для работы по-разному; Ваш пользовательский интерфейс должен быть отделен от логики. Таким образом, DataGrid становится инструментом для представления, а не тем, что нужно ткнуть и подтолкнуть к ценностям.
Вместо этого с WPF вы хотите иметь дело с объектами, которые вы привязали к сетке, независимо от того, как они отображаются. Забудьте сетку - просто найдите объект, который в данный момент "выбран" пользователем, из списка связанных объектов.
SelectedItem - это свойство самой сетки, и благодаря превосходным механизмам связывания WPF вы можете связать это значение со свойством ViewModel через XAML:
ItemsSource="{Binding Orders, Mode=OneWay}"
SelectedItem="{Binding SelectedOrder, Mode=TwoWay}"
Когда пользователь выбирает элемент в сетке, двусторонняя привязка обновит свойство SelectedItem в ViewModel, указав значение этого объекта в этой строке.
Таким образом, вам даже не придется иметь дело со знанием сетки или пользовательского интерфейса.
Я надеюсь, что в этом есть смысл. Я знаю, что это другой подход и другой способ мышления от WinForms.
Я нашел решение, опубликованное другими пользователями в другом потоке в stackru: WPF Toolkit DataGrid SelectionChanged Получение значения ячейки
Попытайся.
private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
var item = e.AddedCells[0];
{
var col = item.Column as DataGridColumn;
var fc = col.GetCellContent(item.Item);
if (fc is CheckBox)
{
}
else if (fc is TextBlock && col.DisplayIndex == 0)
{
textBlock1.Text = (fc as TextBlock).Text;
}
}
}
Иногда привязка к SelectedItem не работает (в зависимости от того, насколько сумасшедшей должна быть ваша модель. Мне нужно транспонировать модель, чтобы все было вверх ногами, и нормальные значения по умолчанию не работают все время.
в dataGrid selectedCellChanged вы можете получить доступ к связанному объекту:
исходя из предыдущего примера Orders[], где каждый Order будет иметь массив SubOrders
foreach (var selectedCell in e.AddedCells)
{
var order = (Order)selectedCell.Item;
var subOrder = order.SubOrders[selectedCell.Column.DisplayIndex-1];
var someValue = subOrder.Value;
}