2011-01-31 9 views
1

これで、ValidationRuleを作成して、アイテムの幅の設定がそのアイテムの所定の範囲内にあることを確認しました。ここで私の試みです:WPF ValidationRule:どのような検証を行っているのですか?

public class AdjustWidthValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     double dValue = (double)value; 

     if (dValue < ??? || dValue > ???) 
      return new ValidationResult(false, "Width is out of range!"); 

     return new ValidationResult(true, null); 
    } 
} 

[OK]を今、どのような要素私は検証されるはずだと思いますか?これは、ハードコードされた検証ルールのみをサポートしているようだが、実際の世界では使用されていないようだ。検証するためのコンテキストが必要です。私は何かを理解していないのですか?これは人の年齢やフィールドの長さだけのためですか?私は静的な状態マシンを提供するはずですか?これは1990年代ですか?私は非常に不満です。

答えて

0

引数として取得する「値」オブジェクトを検証します。あなたはどのような種類の物がこれであるかを知るべきです。あなたはAdjustWidthValidationRuleクラスのプロパティを定義することができ、ハードコードされた値を使用することがより多くの再利用可能ではないようにするには、何かのように:

public class AdjustWidthValidationRule : ValidationRule 
{ 
    public double Max { get; set; } 
    public double Min { get; set; } 

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     double dValue = (double)value; 

     if (dValue < Min || dValue > Max) 
      return new ValidationResult(false, "Width is out of range!"); 

     return new ValidationResult(true, null); 
    } 
} 

、あなたのXAMLで最大値と最小の値を与えることができます(または、あなたがのValidationRuleどこを作成します)。

+0

私はAdjustWidthValidationRuleをXAML内に作成しています。私が知る限り、XAML内の依存関係オブジェクトに対してのみ依存プロパティを設定できます。 ValidationRuleは依存オブジェクトではありません。 – Jordan

+0

私はあなたが言うことを理解していると思うが、(悲しいことに)ValidationRuleはDependencyObjectではないので、バインドすることはできず、値を与えることしかできない。この問題を何らかの形で克服するにはトリックがありますが(ここを参照してください:http://www.11011.net/wpf-binding-properties)、それ以外の場合はより単純な検証スキームに固執する必要があります。 –

+0

ありがとうございますが、私はそれを受け入れません。 WPF検証のこのメソッドは、現実世界では使用できません。すべてのバリデーションは何らかのコンテキストに基づいており、バリデーションのための文脈をまったく提供していないのは悪い設計である。 – Jordan

関連する問題