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 は 1 つのユーザーコントロールのビューモデルであり、A2ViewModel は別のユーザーコントロールのビューモデルです。mainAViewModel はメインの ViewModel です。mainAViewModel で。私はこの2つ(A1、A2)のビューモデルを持っています。問題は、A1 ビューモデルで変更が発生した場合、A2 ビューモデル プロパティを更新する必要があるということです。ガイドしてください。どうすればこれを達成できますか。前もって感謝します

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メソッドにアクセスできる唯一の方法は、パブリックまたは保護されたアクセス修飾子を使用することです。メソッド宣言の前にアクセス修飾子を設定しない場合、デフォルトでプライベートになります。

于 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 に答える