如何在SelectionUnit = Cell时获取所选DataGrid单元格的内容

时间:2015-09-23 17:05:20

标签: c# wpf datagrid wpfdatagrid datagridcell

我想获取用户选择的单元格的值,如下所示:

enter image description here

然而事实证明它比我想象的更具挑战性。

我一直在研究这些内容:

DataGridCellInfo currentCell = MyDataGrid.CurrentCell;
DataGridCellInfo selectedCell = MyDataGrid.SelectedCells[0];

// object selectedItems = MyDataGrid.SelectedItems[0]; throws index out of range error

object selectedValue = MyDataGrid.SelectedValue; // null
object selectedItem = MyDataGrid.SelectedItem; // null

但我找不到其中任何一个的简单文字。有谁知道从哪里获得价值“MEH”?优选地来自DataGridCellInfo类型。

提前致谢。

修改

我设法让这个适用于DataGridTextColumns,但我也有DataGridTemplateColumns并且需要它也适用于那些人。

public string GetSelectedCellValue()
{
    DataGridCellInfo cellInfo = MyDataGrid.SelectedCells[0];
    if (cellInfo == null) return null;

    DataGridBoundColumn column = cellInfo.Column as DataGridBoundColumn;
    if (column == null) return null;

    FrameworkElement element = new FrameworkElement() { DataContext = cellInfo.Item };
    BindingOperations.SetBinding(element, TagProperty, column.Binding);

    return element.Tag.ToString();
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我让这个工作,但我需要指定每列的SortMemberPath作为MyRowClass的属性。

public string GetSelectedCellValue()
{
    DataGridCellInfo cells = MyDataGrid.SelectedCells[0];

    YourRowClass item = cells.Item as YourRowClass;

    // specify the sort member path of the column to that YourRowClass property 
    string columnName = cells.Column.SortMemberPath; 

    if (item == null || columnName == null) return null;

    object result = item.GetType().GetProperty(columnName).GetValue(item, null);

    if (result == null) return null;

    return result.ToString();
}