0

我在访问课程时遇到了一些问题。问题如下。

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 是一个用户控件的视图模型,A2ViewModel 是另一个用户控件的视图模型。mainAViewModel 是主要的 ViewModel。在 mainAViewModel 中。我有这两个(A1,A2)视图模型。问题是,如果 A1 viewmodel 中发生任何更改,那么我必须更新 A2 viewmodel 属性。请指导我。我怎么能做到这一点。提前致谢

4

2 回答 2

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 访问修饰符。如果您在方法声明之前没有放置任何访问修饰符,则默认为私有。

于 2012-06-22T05:26:45.843 回答
0

一些 MVVM 框架通过使用调解器来实现这一点。看看 CinchV2 框架是如何使用它的。例如:

使用以下内容来监听 A2 视图模型的变化

Mediator.Instance.RegisterHandler<int>(MessageKeys.AgreementVersionChanged, OnAgreementVersionChanged);

并使用以下内容在您的 A1 视图模型中发送更改

Mediator.Instance.NotifyColleagues(MessageKeys.AgreementVersionChanged, AgreementModel.AgreementId);

CinchV2 框架中的中介器最棒的地方在于,您可以直接抓取其中的一部分,而不必实现完整的 CinchV2 框架。

于 2012-06-22T06:37:07.327 回答