【问题标题】:WPF Binding to objectsWPF 绑定到对象
【发布时间】:2011-04-24 00:41:39
【问题描述】:

我正在尝试重置绑定到简单表单(一些文本框和几个按钮)的对象中的数据。

我有 2 个单独创建的对象,但具有相同的信息。对象 1 使用 DataBinding 绑定到表单。对象 2 能够将对象 1 重置为原始值。 每当用户编辑数据时,一切都很好,对象 1 会更新为新值,而对象 2 保持不变。当用户编辑一些数据然后单击重置按钮时,我遇到了一个场景问题,该按钮调用的代码如下所示:

Object1 = Object2

值会被重置,但现在当用户再次编辑数据时,Object1 和 Object2 的值都会更新。而且我不能再重置了。

如何重置 Object1 的值而不同时使 Object2 可更新? 有人可以解释为什么 Object2 在重置后变得可以更新吗?

谢谢。

【问题讨论】:

    标签: wpf data-binding binding


    【解决方案1】:

    当您说 Object1=Object2 时,您只是让 Object1 指向对象 2 指向的任何位置。它们共享相同的参考,因此两者都会同时更新。

    我的建议是深度克隆。我不知道你的课程的复杂性。这段代码对我来说非常方便。

    http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx

    因此,每当您重置 Object1 时,请创建一个传入 Object2 的深度克隆对象并将其分配给 Object1。

    【讨论】:

    • 我是这么想的,只需要确认一下。 DeepClone 确实可以完美运行。您知道在使用 DeepClone 时是否存在任何性能问题?感谢您的帮助。
    • 嗯,你基本上是在序列化源和反序列化,所以理论上这个操作越重的对象会花费更多的时间。我已经使用带有多个表和关联数据的 TypedDataSet 结构来处理它,而没有任何明显的性能损失。
    • 听起来不错。我会玩弄它的。我没有疯狂的大对象,所以它应该不会对性能产生太大影响。
    【解决方案2】:

    Object2 被绑定,因为 Object1 现在只是对 Object2 的引用。为避免这种情况,请尝试仅将 Object2 的属性复制到 Object1 中,或者想办法克隆 Object2,然后将克隆分配给 Object1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      相关资源
      最近更新 更多