2012-01-25 1 views
0

私は検証ルールを使ってカスタムメッセージを表示しています。ビジネスルールにはINotifyDataErrorを使用しています。私のコードの検証ルールを使用してエラーを生成するときのデフォルト値の設定方法は?

この1つのパート:

public class ResponseValidation : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     int? response; 
     bool noIllegalChars = TryParseStruct<int>(value.ToString(), out response); 


     if (!noIllegalChars) 
     { 
      return new ValidationResult(false, "Input is not in a correct format."); 
     } 
     else 
     { 
      value = null; 
      return new ValidationResult(true, null); 
     } 
    } 

    ... 
} 

検証がNULL可能データ型のためですが、私は値がnullであるか、整数ではなく、「図5b」などの誤入力できることを意味します。

このエラー(noIllegalChars = true)が発生するのは、どのようにプロパティに値nullを設定できますか?

編集私がこれをやっている理由は、ユーザーがテキストボックスを空のままにした場合(値は "")、技術的にはnull値のプロパティに対しては ""を設定しようとしているからですプロパティに。

答えて

1

技術的 - あなたが参照して値を渡すことができます。

public override ValidationResult Validate(ref object value, System.Globalization.CultureInfo cultureInfo) 

哲学 - あなたの検証ルール値を変更するか、単に値が不良であることを通知したいですか?ユーザーの観点からは、何らかの値を入力しようとすると迷惑になることがありますが、システムは有効ではないと私に伝えますが、にはを入力してください。

コードは、検証のためにを尋ねると、それはあなたの選択だnullに値を設定したい場合は、次の値が参照されない限り、

int? result; 
string input = "5b" 

ValidationResult response = ResponseValidation().Validate(input, CultureInfo.CurrentCulture); 
if (!response.IsValid) 
    result = null; 
else 
    result = int.Parse(input, CultureInfo.CurrentCulture); 

ちょうど私の2セント...

+0

は編集Dスタンレーをご確認ください。私はさらに詳しい情報を得た –

0

あなたがすることはできませんparam。しかし、ロジックを分離しようとしている場合は、データが有効かどうかの判断は、入力フィールドのクリアなど、その決定後の処理とは異なる必要があります。

例えば

if (!rule.Validate(val, CultureInfo.CurrentCulture).IsValid) 
{ 
    //Clear the field... whatever else you want to do 
} 
0

前回の回答はBYREF検証関数に値を渡す言及している - 彼らは言及していないだけで、これは意味的に間違っているですが、これを行い、オーバーロードValidate機能を作成する場合バインディングサブシステムは、XAML内で検証規則を宣言した場合、バインディングサブシステムによって呼び出されません。確かにそれはプログラム的に呼び出すことができますが、その方法でしか到達できないコードでValidationRulesを作成し始めると、足で自分を撃っています。

取るために、より適切な行動が空の文字列が渡された場合、デフォルトint?を返し、フィールド上のコンバータを使用することである。

関連する問題