Я играю с демо-приложением BookShelf от John Papa.
И хотел бы внести некоторые коррективы в то, как редактируется элемент книги. В этом приложении и 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 наиболее простым способом решения моей проблемы?
- Может кто-нибудь дать несколько указаний о том, где (ViewModel, Views) и как я могу реализовать интерфейс?