【问题标题】:Retain Object state across viewmodels MVVM跨视图模型 MVVM 保留对象状态
【发布时间】:2015-01-29 14:51:30
【问题描述】:

这听起来可能很基本,但请原谅我,让我知道可能的解决方案。我在我的应用程序中使用 MVVM 模式,而且我是它的新手。

我有一个父视图(比如“StudentView”)及其视图模型(StudentViewmodel)

StudentView 包含两个控件 - Tablinks 和一个“保存按钮”

  • 选项卡链接将链接到每个视图(如学术、个人等)。这就像带有两个窗格的树视图。我在右窗格中加载页面,标题在左窗格中。每个视图都有自己的 Viewmodel 和相应的属性
  • 允许用户编辑每个视图中绑定到 VM 属性的值。
  • 允许用户浏览每个选项卡并进行更改以更新相应 VM 中的属性

  • 现在,当用户点击“StudentViewModel”中的“保存”按钮时,我需要在每个 VM(如 Academic、Personal)中调用“Save”方法并获取其对持有更新属性的对象的引用并推送给我的控制器。

这里的问题很简单。当我调用 AcademicViewModel 的 Save 方法时,它将创建一个新实例,并且我无法获取通过 Tablinks 启动的已修改对象。

除了将这些属性设为静态之外,这里还有其他工作吗?

提前致谢。

编辑: 因为,我需要从不同的视图模型调用这个 Save 方法。它不是静态方法。它是一个实例方法,因此我需要一个对象来调用它。

【问题讨论】:

  • 这个"Tablinks will have link to each View" 是错误的。在 MVVM 中,您使用 data templates。在StudentViewModel 中应该是子视图模型类的一些可观察的基础集合。然后您的子视图模型调用StudentViewModel 方法来做一些事情:添加项目、编辑、删除等。显然您将StudentViewModel 实例传递给子视图(或者以某种方式使其可用,static 属性也可以这样做)。如果您想使用对话框,请参阅this
  • 请编辑您的问题以解释为什么 Save 方法将创建您的 ViewModel 的新实例,而不是使用现有实例。情况不应该如此。如果您包含代码的一些相关部分,将会有所帮助。

标签: c# wpf class object mvvm


【解决方案1】:

使用 DI 容器解决了我的问题。

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 2011-08-25
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多