Как определить значение выбранной ячейки в DataGrid? (WPF) - PullRequest
4 голосов
/ 01 октября 2010

Как я могу определить SelectedCell s Value In 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 ]

3 голосов
/ 01 октября 2010

Вы должны использовать событие 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
        }
    }

HTH

3 голосов
/ 01 октября 2010

Определение значения выбранной ячейки - это скорее вещь WinForms.WPF предназначен для работы по-разному;Ваш пользовательский интерфейс должен быть отделен от логики.Таким образом, DataGrid становится инструментом для представления, а не тем, что нужно ткнуть и подтолкнуть к ценностям.

Вместо этого с WPF вы хотите иметь дело с объектами, которые вы привязали к сетке, независимо от того, как они отображаются.Забудьте сетку - просто найдите объект, который в данный момент «выбран» пользователем, из списка связанных объектов.

SelectedItem является свойством самой сетки, и благодаря превосходным механизмам привязки WPF вы можете привязать это значение к свойству в ViewModel через XAML:

ItemsSource="{Binding Orders, Mode=OneWay}" 
SelectedItem="{Binding SelectedOrder, Mode=TwoWay}"

Когда пользователь выбираетДля элемента в сетке, двусторонняя привязка обновит свойство SelectedItem в ViewModel значением этого объекта в этой строке.

Таким образом, вам даже не нужно иметь дело со знанием сетки или пользовательского интерфейса.

Надеюсь, это имеет смысл.Я знаю, что это другой подход и другой способ мышления, исходящий из WinForms.

1 голос
/ 26 января 2012

Я нашел решение, опубликованное другими пользователями в другом потоке в stackoverflow: WPF Toolkit DataGrid SelectionChanged Получение значения ячейки

Попробуйте.

0 голосов
/ 04 мая 2011

иногда привязка к 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;

}

0 голосов
/ 02 октября 2010
    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;
            }

        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...