0

Josh Smith の例のようなタブを使用する MVVM アプリケーションがあります。各 TabItem (View) は、個々の ViewModel を表します。

一部のビューには、ObservableCollection にバインドされた DataGrid があります。これまでのところ、すべて正常に動作しています。しかし、セルに入力するなどしてデータ グリッドの編集を開始し、Enter キーを押して変更を送信する前に別のタブに切り替えると、前のタブに戻ることができません。タブのコンテンツは変更されますが、タブ項目は選択されていません。どうにかしてデータグリッドの編集モードを停止する必要があると思いますが、MVVM アプリでそれを行うにはどうすればよいですか? ICollectionViewSource の場合、私はこのようにできることを知っています

  IEditableCollectionView list = (ListCollectionView)this.ItemsView;
  if (list.IsEditingItem) list.CommitEdit();
  if (list.IsAddingNew) list.CommitNew();

しかし、ObservableCollection に対してこれを行うことはできません。バインディングを観察可能なコレクションのビューに変更する必要がありますか、それとも別の方法がありますか?

4

1 に答える 1

0

グリッドの編集モードを自動的に終了するには、次の SO の質問をご覧ください: WPF DataGrid - How to automatically exit Edit Mode?

IEditableObjectまた、グリッド内で編集されるようにバインドされているモデル クラスのインターフェイスを確認することをお勧めします。これにより、データの追加を実装し、オブジェクトのデータの変更 (または変更のロールバック) を編集するための一貫した方法が得られます。

IEditableObject次のメソッドを実装する必要があります。

BeginEdit()
CancelEdit()
EndEdit()

DataGrid は、すぐにIEditableObjectオブジェクトを操作できるように設計されています。

Dr. WPF は、インターフェイスに関する優れた記事をここに書いています: ItemsControl: 'E' is for Editable Collection and there is some sample code for using IEditableObjects with a dataGrid in this MSDN article: How to: Implement Validation with the DataGrid Control

于 2012-08-09T15:04:03.843 に答える