2012-02-13 10 views
0

基本的にGridViewのセル内容(GridViewの)が変更されるたびにメッセージを送信する必要があるGridViewのラッパーであるUserControlがあります。通常、それは次のように解決することができます。EditingElementが不明のときに編集されたGridViewアイテムを取得する

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

問題は、私は(のFrameworkElementとして提供されます)EditingElementの種類を知らないので、私は、変換を行うことができないということです。その瞬間、のcurrentCell.SelectedValueは依然として元の値です。私はモデルをコントロールすることもできません(INotifyPropertyChangedを実装し、それを使って変更をキャッチすることができます)。

いくつかの簡単な方法がありますか?または、これを実装するにはどうすればいいですか?ご意見ありがとうございます。

答えて

0

非常に簡単な解決策は、データグリッドからの2つのイベントがキャッチで構成される(私は1つのことを見ていない信じてすることはできません)私を発見しました。

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であり、選択されたセルを変更したときではなく、コレクションをソートするときにだけ発生します。ありがとう –

関連する問題