我必須訪問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