我玩弄約翰爸爸的BookShelf演示應用程序。 並且想要對書籍項目的編輯方式進行一些調整。在該應用程序中,BookView和EditBookWindow綁定到相同的ViewModel BookViewModel,這很好。Silverlight的MVVM IEditableObject對話框
選擇一本書,將導致EditBookWindow在一個childwindow
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;
}
我想要做的就是在打開dialogwindow並開始編輯之前,將此實體更改爲「回滾」實體。
我在這個問題上谷歌搜索使我認爲,解決這個的最有效的(易)的方式是通過IEditableObject接口:BeginEdit,EndEdit中或的CancelEdit。
我無法搞清楚如何實現這個接口。同時作爲EditBookWindow和圖書查看正在共享同一個視圖模型,該項目改變的是存儲在屬性SelectedBook
private Book _selectedBook;
public Book SelectedBook
{
get { return _selectedBook; }
set
{
_selectedBook = value;
RaisePropertyChanged("SelectedBook");
}
}
- 是在IEditableObject最簡單的方法我的問題?
- 任何人都可以給一些指針(ViewModel,Views)和我如何實現接口?
一種方法可能是將本書的一個版本作爲BookViewModel中的一個屬性進行緩存。如果按下'cancel',然後設置selectedBook = _cachedBook?使用MVVM-light消息傳遞,我可以將消息發回給BookViewModel。或者我應該去尋求更通用的方法? – Kman