0

ビューモデルクラスに2つのプロパティ[SaySize、StrVal]があります。制約の1つは、StrValの長さがSize以下でなければならないということです。この制約は、IDataErrorInfoインデクサーに適用されます。

public string this[string propertyName]
    {

       get
       {
            string msg = null; ;
            switch (propertyName)
            {
                ....

                case "StrVal":
                    {
                        if (this.StrVal.Length > this.SizeOfStringVal)
                        {
                            msg = "Size of entered value is greater than the size";
                        }
                    }
                    break;

                .........

            }
            return msg;
        }
    }

次の状況を考えてみましょう

Size = 5;
StrVal = "ABCDEF" ; // length = 6 > Size
"Error message is generated"
Size = 7 // length of StrVal is less than 7

ただし、「StrVal」プロパティのpropertyChangedイベントをプログラムで起動するまで、視覚的にはエラー状況が表示されます。そのため、次のコードを使用する必要があります。

public int? Size
    {
        get
        {
            return this.size;
        }
        set
        {
            if (value == this.Size)
            {
                return;
            }
            this.size = value;
            this.OnPropertyChanged("StrVal");
        }
    }

これが問題を処理する理想的な方法であるかどうかをアドバイスしてください。よろしく、アニルバン

4

1 に答える 1

4

はい、これがIDataErrorInfo機能する方法です。プロパティ変更通知が発生した場合にのみ検証エラーを照会します。したがって、理想的には、Sizeプロパティは次のようになります。

public int? Size
{
    get
    {
        return this.size;
    }
    set
    {
        if (value == this.Size)
        {
            return;
        }
        this.size = value;
        this.OnPropertyChanged("Size");
        this.OnPropertyChanged("StrVal");
    }
}

サイズプロパティの検証を行っていない場合でも、(「ベストプラクティス」の問題として)プロパティ変更通知を送信する必要があります。

于 2013-02-08T16:30:45.617 に答える