【问题标题】:Silverlight Twoway Binding and rolling back changes - how to?Silverlight Twoway 绑定和回滚更改 - 如何?
【发布时间】:2011-01-09 16:58:47
【问题描述】:

我有简单的 SL 用户控制。一个列表框,显示所有客户,右侧显示一些文本框和组合框,这些文本框和组合框绑定到列表框中的 SelectedItem(客户)。 SelectedItem 绑定到 SelectedCustomer 属性。

我正在寻找一种模式/方法来处理取消对客户所做的更改(在绑定的文本框和组合框中)。

编辑控件(文本框和组合)可以通过一种或两种方式绑定到列表框的选定项。 如果它们是双向绑定的,则文本框中的即时更改会反映在列表框中。如果它们是单向绑定的,则文本框中的更改不会反映在 SelectedCustomer 对象中。

在编辑表单的底部,我有典型的保存、取消、删除按钮。例如,保存按钮将采用 SelectedCustomer 对象(如果双向绑定,我将通过服务发送以保存在服务器上)。

如果文本框是一种绑定方式,我必须以某种方式捕获文本框值并插入到某个对象中以发送到服务器进行保存。

如果我使用双向绑定,并说保存操作失败...我必须将 SelectedCustomer 值设置回原始值,否则客户端现在继续看到尚未保存的数据。

必须有一种简单的方法来处理这种情况......

【问题讨论】:

    标签: silverlight binding


    【解决方案1】:

    带有实体框架的 RIA 服务已经提供了此功能,基本上是 RIA 服务的工作原理,您也可以按照以下方式进行操作。

    每个类都实现了名为 IEditableObject 的接口,该接口提供了 BeginEdit/EndEdit 和 CancelEdit 方法。它还存储(复制)具有从服务器加载的相同值的名称为“OriginalEntity”的同一类的实例。

    在表单出现供用户修改后,调用 BeginEdit,它可能使用反射将每个属性缓存在某种字典中。如果您调用 CancelEdit,则 OriginalEntity 中的值会重新加载到对象中。

    在保存更改时出现一些错误,您可以从服务器刷新实体(最佳方式),或者您可以尝试从 OringalEntity 属性加载属性。

    【讨论】:

    • 好,所以我所做的是为我的 Customer 类创建了一个部分类,即公共部分类 Customer:SL 应用程序中的 IEditableObject。在方法中,我提供了与此处silverlight.net/learn/tutorials/silverlight-4/… 类似的代码
    【解决方案2】:

    我不会放弃用户更改,因为这很容易导致用户感到沮丧。恕我直言,用户不应通过不受控制的数据回滚来了解连接问题。

    【讨论】:

    • 是的,在我的特定场景中,用户正在点击“取消”按钮,因此我需要回滚在编辑表单和列表框中所做的编辑。
    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2012-05-12
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多