我必须访问DataGrid的活动单元格(其周围有黑色边框的单元格)的值。DataGrid如何获取CurrentCell的值
幸运的是,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
}
}
}
在我的例子,该行通过包含对象的数组建各种对象类型。我知道我可以在cellInfo.Column上执行绑定(在投射后),但这不是重点。我的问题是,如果我犯了一些错误的东西,因为我无法想象DataGrid这样一个如此强大的软件,如果不进行如此多的编码就无法提供所需的价值。
我错过了什么,或者它是否真的如此复杂以获得当前的单元格值。
UPDATE
由于Quartermeister在他很好的答案解释,没有进入细胞值的一个属性,这是有一个meaningfull原因。此外,如果让用户重新排列列,请注意像我在示例中那样使用DisplayIndex。
为什么您需要直接访问该值? datagrid被设计为可以与数据绑定和mvvm模式一起工作,这应该避免直接访问ui类(在你的情况下是数据网格单元格)。 – 2010-07-17 18:28:31
在这种情况下,我看不出MVVM如何帮助我?如何将当前单元格绑定到我的视图模型(或我必须绑定的属性),以便我的视图模型跟踪当前单元格,而无需像上面那样编写一些代码。我会对这样的解决方案感兴趣,因为我不喜欢我的方式。 – HCL 2010-07-17 18:56:10
请参阅 http://stackoverflow.com/questions/3272910/fill-a-datagrid-with-data-that-lies-in-a-array 也许你可以帮忙吗? – HCL 2010-07-17 19:19:18