MVVM 在两个视图/视图模型之间传递数据

本文关键字:视图 模型 之间 数据 两个 MVVM | 更新日期: 2023-09-27 18:34:35

我有两个页面:

  1. 第 1 页
  2. 第 2 页

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

  1. 视图模型1
    性能:
    • 名字1
    • 姓氏1
  2. 视图模型2
    性能:
    • 名字2
    • 姓氏2

现在我想在视图模型 1 到 视图模型 2 之间传递数据(属性(,并在第 2 页上检索这些数据。我如何实现这一点?

MVVM 在两个视图/视图模型之间传递数据

你可以看看MVVMLight的Messenger。这是一个可以指导您前进的教程。基本上,这个想法是使用独立于您的视图/视图模型的信使来发送来自/向它们发送消息。您的视图/视图模型注册并发送包含要传递的属性值的特定消息。

您的页面可以这样构造:

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; }
}

您可以使用两个视图模型都继承自的父视图模型或事件聚合器。 这是一个使用反应式扩展的简单方法。