MVVM模式下如何在两个视图/视图模型之间传递数据?

4

我有两个页面:

  1. 页面1
  2. 页面2

还有两个具有相同属性的视图模型:

  1. ViewModel1
    属性:
    • FirstName1
    • LastName1
  2. ViewModel2
    属性:
    • FirstName2
    • LastName2

现在我想在ViewModel1和ViewModel2之间传递数据(属性),并在页面2上检索这些数据。如何实现?


1
你的问题不太清楚。我们是在讨论 ASP.NET MVC(4)吗?你目前已经尝试了什么?可以详细说明一下这两个模型之间的关联吗?能否分享一些代码?别忘了清理一下问题的标记格式。 - Jeroen Vannevel
我的意思是,要么手动完成它,要么创建一个具有两个属性的模型类,并将其添加到两个ViewModel中,这样您就可以将一个设置为另一个。 - Ryan Schlueter
不了解更多情况的话,我建议您查看Html.RenderAction,并让Page1调用Render Action,该操作返回页面2。这仅适用于在Page1中嵌套页面2的情况,如果您想要重定向,则应由Page1的操作处理,而不是视图。 - AaronLS
需要澄清的是:“我想在ViewModel1和ViewModel2之间传递数据(属性),并在第二页上检索这些数据。” - AaronLS
3个回答

0

你的页面可以像这样构建:

public class Page2 {

  public ViewModel1 VM1;

  public Page2() {
    VM1 = new ViewModel1(new ViewModel2());
  }
}

您的ViewModel1可以像这样,使用传递属性:

public class ViewModel1 : Person {

  private ViewModel2 _vm2;

  public ViewModel1(ViewModel2 vm2) {
    _vm2 = vm2;
  }

  public override string FirstName {
    get { return _vm2.FirstName; }
  }

  public override string LastName {
    get { return _vm2.LastName; }
  }
}

我们假设你的 ViewModel2 有一些业务逻辑或者其他内容。

public class ViewModel2 : Person {
  //Etc
}

两者都继承自同一个基类:

public abstract class Person {
  public abstract string FirstName { get; }
  public abstract string LastName { get; }
}

0
你可以看一下 MVVMLight 的 Messenger。这里 有一个教程可以指导你。基本上,想法是使用一个与你的视图/视图模型无关的信使来发送消息到/从它们那里。你的视图/视图模型注册并发送包含你想要传递的属性值的特定消息。

这个例子展示了如何从View传递数据到ViewModel。他想在两个ViewModel之间交换数据。 - Szymson

0

你可以选择使用一个父ViewModel,让两个ViewModel继承它,或者使用事件聚合器。这里是一个使用响应式扩展的简单示例。


我想在标准ASP.NET中实现类似session["property"]或cookie["property"]的功能。因此,我希望能够将一个xaml页面的属性值传递到另一个页面中。你知道是否有任何包含解决我问题的示例MVVM应用程序吗? - Piotr Treska

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接