2011-07-25 16 views
3

我有一個帶有RowValidationRules的WPF DataGrid。我想設置焦點或者在驗證失敗的情況下開始編輯特定的單元格。WPF DataGrid:在行驗證錯誤後將焦點設置在特定單元格上

例如,如果單元格中的值低於另一個單元格中的值,並且用戶不遵守此規則,則我想自動設置焦點並開始編輯第一個單元格。

什麼是最優雅的方式來做到這一點?我注意到ValidationResult.ErrorContent屬性通常用於顯示錯誤消息,但由於它的類型是「object」,我可能會定製它以返回有關驗證錯誤時應該獲得焦點的單元的信息嗎?我不知道如何恢復和使用XAML中的信息。

回答

0

由於ValidationRule不會從DependencyObject繼承,因此無法在自定義ValidationRule類中定義DependencyProperty並將其綁定到相應的UI元素。

不過,我能想到的解決方案,可幫助您解決問題:

你仍然可以在自定義有效性規則類中定義的字符串屬性(比如TargetUINameString)並將其設置爲每個UI元素這樣的名字:

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

靜態屬性(比如ActiveInstanceOfThis)從添加到您的窗口,它授予您訪問窗口類的活動實例。 (它在窗口的構造函數中設置爲this

然後使用FindName解決這個問題:

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(); 
    } 
} 

這是一個有點髒,但它的工程!

相關問題