0

次のコードを見てください

public class VM1
{
    private bool isValid;
    private VM2 vmInstance;

    // ...

    public bool IsValid
    {
        get { return this.isValid; }
        set { /* ... */ } 
    }

    public VM2 VMInstance
    {
        // ...
    }

}
public class VM2
{
    public bool IsValid
    {
        // ...
    }
}

IsValid-property は、 の-propertyVM1の値に依存するようになりました。それを達成するための最良の方法は何ですか?IsValidVM2

私は自分の問題を解決する方法を見つけました。VM1 クラスは VM2 の propertychanged イベントをサブスクライブします。VM2 の ISValid プロパティが変更された場合、このイベント ハンドラでは、VM1 の setState() メソッドを呼び出して、IsValid プロパティの値を決定します。

    void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        switch (e.PropertyName)
        {
            case "IsValid":
                // call a method in VM1 to decide the value of IsValid property of VM1
                // say, the method name is setState()
                break;
         }
     }

これは正しいアプローチですか?

4

2 に答える 2

0

VM2IsValidプロパティをどのように検討するかについて、さらに情報が必要です。

のインスタンスをVM2のコンストラクターに渡して、VM1参照できるようにすることから始めることができます。次の例を見てください。

public class VM1
{
    private bool isValid;
    private VM2 vmInstance;
    //......

    public VM1(VM2 vm2)
    {
        VMInstance = vm2;
    }

    public bool IsValid
    {
        get
        {
            return this.isValid && VMInstance.IsValid;
        }
        set
        {
            // 
        }

    }

    public VM2 VMInstance 
    { 
        get { return vmInstance; }
        set { vmInstance = value; }
    }
}

public class VM2
{
    public bool IsValid { get; set; }
}
于 2013-02-12T14:59:25.910 に答える
0

が有効な場合VM1にのみ有効な場合VM2は、&&-operator を使用して両方のプロパティの共通の結果を返しIsValidます。

public class VM1
{
    // ...

    public bool IsValid
    {
        get
        { 
            return isValid && 
                   (VMInstance != null && VMInstance.IsValid);
        }
        set
        {
            isValid = value;
        }
    }

    // ...
}

したがって、 (プライベート フィールド) と returnの両方が返される場合VM1.IsValidにのみ返されます。trueVM1.isValidVM2.IsValidtrue

VM1.IsValid戻るかどうか、または戻るかどうかにtrue応じてfalse決定するのはあなた次第です。それに応じてステートメントを調整してください。VMInstancenull

IsValidセッターは、2 番目のビュー モデルのプロパティに影響を与えないため、現在のインスタンスの値のみを設定します。

于 2013-02-12T15:03:19.357 に答える