我有简单的SL用户控件。列表框显示所有客户,右侧显示绑定到列表框中SelectedItem(Customer)的多个文本框和组合框。 SelectedItem绑定到SelectedCustomer属性。
我正在寻找一种模式/方法来处理取消对客户所做的更改(在绑定的文本框和组合框中)。
编辑控件(文本框和组合)可以是一种或两种方式绑定到列表框的选定项目。 如果它们是双向绑定的,则文本框中的立即更改将反映在列表框中。如果它们是单向绑定的,则文本框中的更改不会反映在SelectedCustomer对象中。
在编辑表单的底部,我有典型的保存,取消,删除按钮。例如,保存按钮将采用SelectedCustomer对象(如果twoway绑定,我将通过服务发送以保存在服务器上)。
如果文本框是单向绑定,我必须以某种方式捕获文本框值并插入到某个对象中以便发送到服务器进行保存。
如果我使用twoway绑定,并说保存操作失败...我必须将SelectedCustomer值设置回原始值,否则客户端现在继续查看尚未保存的数据。
必须有一种简单的方法来处理这种情况......
答案 0 :(得分:0)
我不会丢弃用户更改,因为这很容易导致用户沮丧。恕我直言,不应通过不受控制的数据回滚通知用户连接问题。
答案 1 :(得分:0)
带有实体框架的RIA服务已经提供了这项功能,基本上就是RIA服务的工作原理,你也可以这样做。
每个类实现一个名为IEditableObject的接口,它提供BeginEdit / EndEdit和CancelEdit方法。它还存储(复制)具有名称“OriginalEntity”的相同类的实例,其具有从服务器加载的相同值。
在表单显示供用户修改之后,调用BeginEdit,它可能在某种字典中使用反射缓存每个属性。如果调用CancelEdit,则OriginalEntity中的值将加载回对象。
保存更改时出现一些错误,您可以从服务器刷新实体(最佳方式),也可以尝试从OringalEntity属性加载属性。