将一个类变量的方法调用到另一个类变量

时间:2012-06-22 05:19:05

标签: .net wpf

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

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我。我怎么能做到这一点。提前致谢

2 个答案:

答案 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框架。