2012-03-15 6 views
1

私はDataGridを持っており、同じ行の他のセルの値に基づいて検証したい項目を持つDataGridTextColumnを持っています。列はデータ項目のプロパティの1つにバインドされます。同じデータ項目の別のプロパティには、入力マスクのようなものが含まれています。検証では、現在の行のデータ項目の入力マスクで新しい値をチェックする必要があります。その入力マスクはフォーム上のどこでも編集されません(入力マスクの変更を追跡する必要はありません)が、入力マスクは行ごとに異なる場合があります。では、どうやってカスタムバリデーターを書くのですか?このデータ項目の他のプロパティに基づいてセル値を検証します

<DataGridTextColumn Width="*"> 
        <DataGridTextColumn.Binding> 
         <Binding Path="Name" Mode="TwoWay" UpdateSourceTrigger="LostFocus" ValidatesOnExceptions="True" NotifyOnValidationError="True" ValidatesOnDataErrors="True"> 
          <Binding.ValidationRules> 
           <validation:Class2 ValidatesOnTargetUpdated="True" Format="999" /> 
          </Binding.ValidationRules> 
         </Binding> 
        </DataGridTextColumn.Binding> 
       </DataGridTextColumn> 

そしてここでは、バリデータのコードを行く:

class Class2 : ValidationRule 
    {   
     /// <summary> 
     /// input mask 
     /// </summary> 
     public string Format { get; set; } 

    /// <param name="value">cell's new value that should be validated against input mask</param>   
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     // validation logic goes here 
     return new ValidationResult(true, null); 
    } 
} 

をしかし、クラス2は継承していないので、私がデータ項目にClass2.Formatプロパティをバインドすることができないことが表示されます、私は次のことを試してみましたDependencyObjectから。私は単純にすべてのFormat値をC#コードから手動で初期化すればこの問題を解決できるかもしれないと思っていますが、XAMLバインディング式を使った方が良い解決策があるはずです。

アイデア?

答えて

1

他のValidationStep = "RawProposedValue"を使用する必要があります。次に、ValidatingメソッドでBindingExpressionを値パラメータとして取得します。このBindingExpression.DataItemプロパティには、実際のデータ項目が含まれています。

関連する問題