我正在使用MVVM模式处理客户端/服务器(WPF / WCF)应用程序。
ViewModel上的属性绑定到Model上的属性,以便在更改Model时,更改会立即传播到View。
当用户点击刷新时,服务器上的任何新/已更改数据都会合并到模型中,因此刷新机制运行良好。
如何处理用户编辑和保存属性?这就是我想要发生的事情:
- 用户点击“修改”
- 用户修改TextBoxes中的值
- 用户点击“保存”
- 更改将发送到服务器
- 如果成功,服务器将返回已合并到的更新项目 模型和UI已更新。
- 如果不成功,服务器返回错误,模型不会更新。
醇>
似乎通过使用MVVM,模型在步骤3更新(使步骤5和6冗余),如果服务器上发生错误,则客户端上的数据与服务器不一致。
有没有最好的做法来处理这种情况?
答案 0 :(得分:0)
我们处理此方式存储了原始数据的副本。 每当更新失败时,我们都会将原始数据恢复到视图中。
答案 1 :(得分:0)
我提出的解决方案是创建第二组对象 - ModelUpdates。
当用户单击 Edit 时,将实例化ModelUpdate对象(具有与Model对象相同的属性),并将DataContext切换到该对象。
当用户单击保存时,ModelUpdate对象的详细信息将发送到该服务。该服务响应有关更新对象的详细信息,然后将其合并到模型存储库中。
这意味着模型只会使用已成功保存的数据进行更新。如果对象保存不正确,数据库版本将被发送回客户端。如果保存时发生错误,数据库版本将被发送回客户端。如果服务器不可用,客户端将保留预编辑版本。
答案 2 :(得分:-1)
我认为应该使用同步后置方法 这样,如果发生错误,模型和视图侧是相同的。此外,在获取保存的数据之前,您的视图不会更新。
简单来说:
1)用户点击编辑
2)用户进行更改
3)用户点击保存
3.1)应用程序将数据汇总到模型中
3.2)模型保存更改
3.3)模型返回变更数据
4)使用成功(已更改的数据)或失败的消息查看更改。