【问题标题】:how to save and load an object如何保存和加载对象
【发布时间】:2014-07-01 09:19:09
【问题描述】:

目前,我正在使用 WPF。我有两个窗口,即 window1 和 window2。 window1 有一个导航到 window2 的按钮; window2 还有一个返回 window1 的按钮。 window2 有许多控件和用户控件。情况是每当我将window1导航到window2时,由于某些原因,我必须创建window2的新对象。我知道单例模式,但不能在这里应用。

现在,在 window2 的卸载事件中,我将 window2 的对象保存在静态类中(我将“this”保存到静态类)。当用户再次在此处导航时,我想加载保存的对象而不是构造新对象。

是否有任何方法可以在要构造的当前对象中加载保存的对象? I-e 在构造函数或加载的某个地方我可以加载保存的对象?

提前致谢

【问题讨论】:

  • 可以将Window2 的实例保留为Window1 的属性。但是,如果问题是 Window2 加载缓慢,这不是一个好的解决方案。尝试找出导致加载时间缓慢的原因并修复它
  • 实际上我必须在 window2 的对象 I-e 中加载保存的对象(即 window2 对象),当用户来这里两次而不是构建新的对象时,我想在刚开始的新 window2 对象中加载前一个对象建设
  • 我知道这对您没有帮助,但请不要这样做 - 这对我来说是糟糕的设计。你有状态所以传递它而不是一起破解一些 UI 意大利面条
  • 同样,保存实例是一种解决方案,但它是一个糟糕的解决方案。相反,您应该尝试找出导致加载缓慢的原因并直接解决(通过使用线程或性能调整)
  • 实际上我正在使用 devexpress Metro 风格导航(他们没有文档,因为他们说它的扩展名),我只注册我的视图(我调用 window2)然后每次我按下转到 window2 它会创建新对象。这就是为什么我想在 window2 的构造函数再次调用时加载保存的对象

标签: c# wpf winforms


【解决方案1】:

因为它被标记为wpf,你绝对应该看看mvvm。除了在表单之间传递数据,您将有两个 ViewModels(每个表单)来保存所有与 UI 数据相关的数据,还有一些 Models 来保存其余数据。并且这些视图模型(和模型)将在表单关闭/打开之间持续存在,这意味着无需传递任何内容或保存/加载。

如果您需要实际保存数据(例如,不同的状态集或数据在退出/启动应用程序中存活),请查看序列化。我最喜欢的是XmlSerializer/XmlDeserializer,因为它易于控制、易于更改(编辑数据)并且易于支持版本控制。周围有几十个教程,只需搜索“c#序列化”,可选单词“xml”,或“binary”甚至“protobuf”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2019-06-13
    相关资源
    最近更新 更多