MVVM 在两个视图/视图模型之间传递数据
本文关键字:视图 模型 之间 数据 两个 MVVM | 更新日期: 2023-09-27 18:34:35
我有两个页面:
- 第 1 页
- 第 2 页
和两个具有相同属性的视图模型:
-
视图模型1
性能:- 名字1
- 姓氏1
-
视图模型2
性能:- 名字2
- 姓氏2
现在我想在视图模型 1 到 视图模型 2 之间传递数据(属性(,并在第 2 页上检索这些数据。我如何实现这一点?
你可以看看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; }
}
您可以使用两个视图模型都继承自的父视图模型或事件聚合器。 这是一个使用反应式扩展的简单方法。