2

私はしばらくの間 MVVM パターンを使用してきましたが、あるプロパティの値が別のプロパティの値に依存するというシナリオに頻繁に遭遇します。たとえば、高さと幅を持つコントロールがあり、高さと幅をフォーマットされた文字列 "{height} x {width}" としてコントロールに表示したいとします。したがって、ビュー モデルに次のプロパティを含めます。

public class FooViewModel : INotifyPropertyChanged
{
    // . . .

    private double _width;
    public double Width
    {
        get { return _width; }
        set
        {
            if(_width != value)
            {
                _width = value;
                NotifyPropertyChanged("Width");
                NotifyPropertyChanged("DisplayString"); // I had to remember to
                                                        // do this.
            }
        }
    }

    public string DisplayString
    {
        get
        {
            return string.Format("{0} x {1}", _width, _height);
        }
    }

    // . . .
}

次に、my のコンテンツを DisplayString プロパティにバインドします。これは、 aを使用して Width および Height プロパティから変換するLabelよりもはるかに便利です。IMultiValueConverter不便な部分は、「Width」または「Height」の NotifyPropertyChanged が必要な場所ではどこでも、「DisplayString」の通知も忘れずに行う必要があることです。これをさまざまな程度で自動化する無数の方法を考えることができますが、私の質問は、MVVM でこれを行うために人々が一般的に使用する標準的な方法があるかどうかWPFです。

4

2 に答える 2

2

いいえ、これを行う標準的な方法はありません。

PropertyChanged ヘルパー メソッドを持つ基本ビューモデル クラスを作成できます。DependsOn 属性 (これも作成します) を持つクラスのプロパティを調べ、更新されたプロパティに依存するすべてのプロパティに対してイベントを発生させます。

于 2012-04-23T20:08:49.420 に答える
1

ViewModelのプロパティ間に多くの依存関係がある場合は、空の文字列を使用してNotifyPropertyChangedを呼び出し、ビューからバインドされているすべての要素を更新できます。これを自動化する意味がわかりません。

于 2012-04-23T20:01:58.240 に答える