Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGrid如何获取CurrentCell的值_C#_.net_Wpf_Wpfdatagrid - Fatal编程技术网

C# DataGrid如何获取CurrentCell的值

C# DataGrid如何获取CurrentCell的值,c#,.net,wpf,wpfdatagrid,C#,.net,Wpf,Wpfdatagrid,我必须访问DataGrid的活动单元格(周围有黑色边框的单元格)下的值 幸运的是,DataGrid有很多属性,比如CurrentCell、CurrentItem SelectedCells SelectedItem和SelectedItems,它们似乎为我提供了所需的数据 然而,我还没有弄明白如何以一种简单的方式访问手机。我也改变了 SelectionMode="Single" SelectionUnit="Cell" …但最后我不得不这样做: DataGridCellInfo cellInf

我必须访问DataGrid的活动单元格(周围有黑色边框的单元格)下的值

幸运的是,DataGrid有很多属性,比如CurrentCell、CurrentItem SelectedCells SelectedItem和SelectedItems,它们似乎为我提供了所需的数据

然而,我还没有弄明白如何以一种简单的方式访问手机。我也改变了

SelectionMode="Single" SelectionUnit="Cell"
…但最后我不得不这样做:

DataGridCellInfo cellInfo = dataGrid.CurrentCell;

if(null != cellInfo && cellInfo.IsValid)
{
    object[] array = cellInfo.Item as object[];
    if (null != array && cellInfo.Column.DisplayIndex >= 0 && cellInfo.Column.DisplayIndex < array.Length) 
    {
        object cellValue = array[cellInfo.Column.DisplayIndex];
        if (null != cellValue) 
        {
            // Here we are
        }
    }
}
DataGridCellInfo-cellInfo=dataGrid.CurrentCell;
if(null!=cellInfo&&cellInfo.IsValid)
{
object[]数组=cellInfo.Item作为object[];
if(null!=array&&cellInfo.Column.DisplayIndex>=0&&cellInfo.Column.DisplayIndex
在我的示例中,行是通过包含各种对象类型的对象数组构建的。我知道我可以在cellInfo.Column上执行绑定(在转换之后),但这不是重点。我的问题是,如果我真的做错了什么,因为我无法想象像DataGrid这样功能强大的软件,如果不进行大量编码,就无法为我提供所需的价值

我遗漏了什么,或者获取当前单元格值真的很复杂。

更新


正如Quartermeister在他非常好的回答中所解释的,没有一个属性可以访问cells值,这是有意义的原因的。此外,如果您让用户重新排列列,请注意不要像我在示例中所做的那样使用DisplayIndex。

这真的很复杂。问题是DataGridColumn不一定绑定到单个值。例如,只有一个数据模板。模板可能会使用row对象中的多个值,甚至根本没有值,因此无法有效地为该单元格返回单个值

如果列是a(例如a),则可以保证只有一个值。正如您所说,您可以通过执行绑定来获得值。例如,您可以这样做(请注意,这对于使用ElementName或RelativeSource的绑定不起作用,但您可能不会在DataGridBoundColumn中使用这些绑定):


请注意,您可能不想使用DisplayIndex属性,因为如果用户手动拖动列以对其重新排序,则可以更改该属性

为什么需要直接访问该值?datagrid设计用于数据绑定和mvvm模式,这应该可以避免直接访问ui类(在您的情况下是数据网格单元)的需要?如何将当前单元格绑定到视图模型(或必须绑定到哪个属性),以便视图模型可以跟踪当前单元格,而无需像上面那样编写代码。我对这样的解决方案很感兴趣,因为我不喜欢这样做。请看你是否能帮我?+1并接受:谢谢你的详细解释。现在我觉得这很有道理。顺便说一句,执行binding.Wow 7行代码以获取当前单元格值的好方法,它返回NULL。知道是谁为网格设计了这个糟糕的借口吗。我猜微软以前所有优秀的程序员都去了谷歌或AWS。
var cellInfo = dataGrid.CurrentCell;
if (cellInfo != null)
{
    var column = cellInfo.Column as DataGridBoundColumn;
    if (column != null)
    {
        var element = new FrameworkElement() { DataContext = cellInfo.Item };
        BindingOperations.SetBinding(element, FrameworkElement.TagProperty, column.Binding);
        var cellValue = element.Tag;
    }
}