1

私は、WPF アプリケーションで Caliburn と MVVM パターンを使用しており、できるだけ多くの規則を使用しようとしています。私が直面している問題の 1 つは、インポートされたクラスでプロパティが変更された通知を接続する必要がある場合です。

次のような ViewModel があるとします。

class ViewModelA
{
    private readonly IViewModelB _b;

    public ViewModelA(IViewModelB b)
    {
        _b = b;
    }

    public bool CanGo
    {
        get { return _b.MyBoolProperty; }
    }

    public void Go()
    {
        //Does something here
    }
}

MyBoolProperty の PropertyChanged イベントが ViewModelB から発生したときに、NotifyOfPropertyChange(() => CanGo) を呼び出す推奨 (正しい) 方法は何ですか?

過去に、これを管理するために PropertyObserver 型クラスを使用しました。

それとも、このシナリオを完全に間違って設計していますか?

4

1 に答える 1

3

「サブ」モデルがパブリック プロパティで公開されている場合は、DependenciesAttribute を使用して変更を追跡できます。

 
class ViewModelA
{
    public IViewModelB B {get; private set;}

    public ViewModelA(IViewModelB b)
    {
        B = b;
    }

    public bool CanGo
    {
        get { return B.MyBoolProperty; }
    }

    [Dependencies("B.MyBoolProperty")]
    public void Go()
    {
        //Does something here
    }
}

適切に機能させるには、プロパティ パス全体を通知オブジェクトで構成する必要があります。末尾に「*」を付けることもできます

[Dependencies("B.*")]

B のすべてのプロパティが前提条件の再評価を引き起こす必要があることを示します。"*" は、プロパティ パスの最後で1レベルの深さだけに作用することに注意してください(B のサブモデルの変更を追跡しません)。

于 2010-07-18T01:40:07.170 に答える