我在访问课时遇到了一些问题。问题如下。
public class A1ViewModel
{
int A1no;
public int A1NO
{
get { return A1no;}
set { A1no=value;
propertychanged("A1NO");
M1()
}
}
public M1()
{
// do some thing
}
}
public class A2ViewModel
{
int A2no;
public int A2NO
{
get { return A2no;}
set { A2no=value;
propertychanged("A2NO");
M2()
}
}
public M2()
{
//do some thing
}
}
public class mainAViewModel()
{
var a1ViewModel = new A1ViewModel();
var a2ViewModel = new A2ViewModel();
}
这里A1ViewModel是一个用户控件的viewmodel,A2ViewModel是另一个usercontrol的viewmodel。和mainAViewModel是主要的ViewModel。在mainAViewModel中。我有这两个(A1,A2)视图模型。问题是,如果在A1 viewmodel中发生任何更改,那么我必须更新A2 viewmodel属性。请gudie我。我怎么能做到这一点。提前致谢
答案 0 :(得分:2)
我认为你要做的事情将涉及使用派生类:
public class A1 : A2
{
int A1no;
public M1()
{
this.M2();
}
}
public class A2
{
int A2no;
protected M2()
{
// Do something
}
}
public class mainA()
{
var a1 = new A1();
var a2 = new A2();
a1.M1();
}
这样,A1继承自其基类A2。但是,A1类型的对象可以访问A2.M2方法的唯一方法是使用public或protected访问修饰符。如果在方法声明之前没有放置任何访问修饰符,则默认为private。
答案 1 :(得分:0)
一些MVVM框架通过使用Mediator实现了这一点。看看CinchV2框架如何使用它。例如:
使用以下内容监听A2 viewmodel
中的更改Mediator.Instance.RegisterHandler<int>(MessageKeys.AgreementVersionChanged, OnAgreementVersionChanged);
并使用以下命令在A1 viewmodel中发送更改
Mediator.Instance.NotifyColleagues(MessageKeys.AgreementVersionChanged, AgreementModel.AgreementId);
关于CinchV2框架中介体的一个很棒的事情是你可以抓住它的一部分,你不必实现完整的CinchV2框架。