John Papa によるBookShelfデモ アプリケーションをいじっています。また、書籍アイテムの編集方法を調整したいと考えています。そのアプリケーションでは、BookView と EditBookWindow の両方が同じ ViewModel BookViewModel にバインドされていますが、これは問題ありません。
ブックを選択すると、EditBookWindow が子ウィンドウで開かれます。
private void OnLaunchEditBook(LaunchEditBookMessage msg)
{
var editBook = new EditBookWindow();
editBook.Show();
}
いずれかの値を編集すると、選択した本のデータが BookViewModel で更新されます。ここで問題が発生します。ダイアログ ウィンドウで [キャンセル] を押しても、変更は保持されます。
private void OKButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
}
私がやりたいことは、ダイアログウィンドウを開いて編集を開始する前に、エンティティをその状態に「ロールバック」するように変更することです。
この問題に関する私の Google 検索では、これを解決する最も効率的な (そして簡単な) 方法は、IEditableObject インターフェイス (BeginEdit、EndEdit、または CancelEdit) を使用することだと思います。
このインターフェイスを実装する方法がわかりません。EditBookWindow と BookView の両方が同じ ViewModel を共有しているため、変更された項目はプロパティ SelectedBook に格納されます。
private Book _selectedBook;
public Book SelectedBook
{
get { return _selectedBook; }
set
{
_selectedBook = value;
RaisePropertyChanged("SelectedBook");
}
}
- IEditableObject は私の問題に対する最も簡単なアプローチですか?
- Can anyone give some pointers on where (ViewModel, Views) and how I could implement the interface?