2011-07-25 9 views
3

RowValidationRulesを持つWPF DataGridがあります。検証が失敗した場合に備えて、フォーカスを設定するか、特定のセルの編集を開始したいと思います。WPF DataGrid:行の検証エラー後に特定のセルにフォーカスを設定

たとえば、セルの値が別のセルの値よりも低く、ユーザーがこのルールを遵守しない場合は、フォーカスを自動的に設定して最初のセルの編集を開始したいと思います。

これを行う最もエレガントな方法は何ですか? ValidationResult.ErrorContentプロパティは通常、エラーメッセージを表示するために使用されますが、タイプが「オブジェクト」なので、検証エラーの場合にフォーカスを取得するセルに関する情報を返すようにカスタマイズすることができますか? XAMLでその情報を回復して使用する方法がわかりません。

答えて

0

DependencyObjectから継承されないため、カスタムValidationRuleクラスにDependencyPropertyを定義して適切なUI要素にバインドすることはできません。

しかし、私はあなたの問題を解決するのに役立ちます解決策を考えることができます。

あなたはまだあなたのカスタムのValidationRuleクラスの文字列プロパティ(TargetUINameString言う)を定義し、このような各UIエレメントの名前に設定することができます:

<TextBox Name="textbox1"... 
    <c:MyValidationRule TargetUINameString="textbox1"/> 
... 

あなたのウィンドウクラスのアクティブなインスタンスへのアクセスを許可され、からあなたの窓に静的プロパティを(たとえばActiveInstanceOfThis)を追加します。

public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
{ 
    if (value==null) 
    { 
     var uielement = 
      Window1.ActiveInstanceOfThis.stackPanel1.FindName(TargetUINameString) 
      as TextBox; 
     if(uielement!=null) uielement.Focus(); 
    } 
} 

それは少し汚いですが、それは動作します:FindName指定を使用して、それを解決し、その後

を(自分のウィンドウのコンストラクタでthisに設定します)!

関連する問題