2012-02-13 66 views
0

我有一個UserControl,它基本上是一個GridView的包裝器,每當單元格(GridView的)內容發生更改時,都需要發送消息。通常情況下,這可以解決這樣的:當EditingElement未知時獲取編輯的GridView項目

private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
    { 
     var editingTextBox = e.EditingElement as TextBox; 
     doSomething(editingTextBox.Text); 
    } 

的問題是,我不知道EditingElement的類型(這是作爲一個FrameworkElement的),所以我不能做轉換。而在那一刻,currentCell.SelectedValue仍然是原始值。我也無法控制模型(我可以實施INotifyPropertyChanged並使用它來捕捉更改)。

有沒有一些簡單的方法我失蹤?或者你會如何去實現這個?謝謝你的任何建議。

回答

0

我發現了一個非常簡單的解決方案(不敢相信我還沒有看到一個)組成抓住從DataGrid兩個事件。 下面是代碼:

private object changedRow; 

    private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
    { 
     changedRow = e.Row.Item; 
    } 

    private void MainDataGrid_CurrentCellChanged(object sender, EventArgs e) 
    { 
     if (changedRow != null) 
     { 
      // do something with the edited row here 
      changedRow = null; 
     } 
    } 
1

CollectionView內包裝您的模型並將其用於綁定。

myCollectionView = (CollectionView) 
    CollectionViewSource.GetDefaultView(rootElem.DataContext); 

這將爲您提供一個INotifyPropertyChanged接口。

更新 對不起我的第一個答案是有點誤導。

如果您無法更改模型,則應創建視圖模型。實現INotifyPropertyChanged的視圖模型可以在不知道當前視圖的情況下提供所需的更改事件。這樣,視圖不直接依賴於模型。

Futher閱讀: The role of the model in MVVM

+0

你能提供我將如何去有關檢索來自的CollectionView變化的樣本?我在CollectionView上看到的唯一事件是CurrentChanging/CurrentChanged,甚至只有在對集合進行排序時纔會觸發這些事件,而不是在更改所選單元格時觸發。謝謝 – 2012-02-15 08:45:58

相關問題