gpt4 book ai didi

mvvm - Silverlight MVVM IEditableObject 对话框

转载 作者:行者123 更新时间:2023-12-03 10:30:26 25 4
gpt4 key购买 nike

我在玩BookShelf John Papa 的演示应用程序。
并且想对图书项目的编辑方式进行一些调整。在该应用程序中,BookView 和 EditBookWindow 都绑定(bind)到同一个 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;
}

我想做的是在您打开对话框窗口并开始编辑之前将其更改为将实体“回滚”到它的状态。

我在这个问题上的谷歌搜索让我认为解决这个问题的最有效(和简单)的方法是使用 IEditableObject 接口(interface):BeginEdit、EndEdit 或 CancelEdit。

我无法弄清楚如何实现这个接口(interface)。由于 EditBookWindow 和 BookView 共享相同的 ViewModel,因此更改的项目存储在属性 SelectedBook
private Book _selectedBook;
public Book SelectedBook
{
get { return _selectedBook; }
set
{
_selectedBook = value;
RaisePropertyChanged("SelectedBook");
}
}
  • IEditableObject 是解决我的问题的最简单方法吗?
  • 任何人都可以就哪里(ViewModel,Views)以及如何实现接口(interface)给出一些指示?
  • 最佳答案

    这与 this post 解决的问题相同。并且可以应用相同的解决方案。 :-)

    简而言之,创建模型的副本,用它初始化您的详细 View 。或者,在 View 模型中保存模型的副本,并在按下取消时将其重置。或者在取消时从数据源重新加载项目。

    编辑 :

    如果你想使用 IEditableObject您可以将模型保存在 BeginEdit , 清除 EndEdit 上的保存状态, 并使用保存状态恢复 CancelEdit 上的原始状态. JavaScriptSerialize的用法r 使创建备份副本变得非常容易。

    使用 IEditableObject只是一种变体,而不是完全不同的概念。使用 IEditableObject它自己负责处理回滚机制的模型。在第一种方法中,ViewModel负责。

    如果您可以编辑 Model使用 IEditableObject很好,但通常你不能修改模型,例如如果您的模型是在访问 Web 服务时由代理生成的。

    关于mvvm - Silverlight MVVM IEditableObject 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512356/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com