2014-10-27 116 views
0

我試圖啓動我的需求組合框的驗證....類似的代碼完全適用於一個文本框,但看起來像組合框的行爲完全不同(文本或selectedItem綁定):WPF組合框validationrules

<ComboBox x:Name="someCombo" ItemsSource="{Binding items}"> 
    <ComboBox.SelectedItem> 
     <Binding Path="Model.SomeItem" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <validation:SomeValidationRule ValidatesOnTargetUpdated="False"> 
       </validation:SomeValidationRule > 
      </Binding.ValidationRules> 
     </Binding> 
    </ComboBox.SelectedItem> 
</ComboBox> 

public class SomeValidationRule : ValidationRule 
{ 

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

     var userText = value as string; 
     return String.IsNullOrWhiteSpace(userText)? 
      new ValidationResult(false, "empty combobox error..") : 
      new ValidationResult(true, null); 
    } 
} 

爲一個文本框時,我想通過MyTextBox.UpdateSource但我不能找到任何方式與組合框做到這一點,我可以啓動驗證。

我需要在特定情況下僅在需求時啓動validaiton。

所以我的問題是爲什麼someCombo.UpdateSource不啓動我的驗證?

感謝

米歇爾

+0

你能告訴我們發生故障的'UpdateSource'代碼? – 2014-10-27 14:42:29

+0

someCombo.UpdateSource()//要在此處手動啓動驗證 – michelqa 2014-10-27 14:45:36

+0

「ComboBox」上沒有'UpdateSource'方法。你可以添加你的*實際代碼*,但不能解決問題嗎?你在調用擴展方法嗎?如果是這樣,那麼該方法的代碼是什麼? – 2014-10-27 14:49:04

回答

1

這只是正常的我:

var expression = someCombo.GetBindingExpression(Selector.SelectedItemProperty); 
if (expression != null) 
    expression.UpdateSource(); 
+0

感謝它現在的工作......唯一的問題是,當應用程序根據不同的事情填充組合框的值時,這將啓動驗證,我不想在此時驗證組合框。我手動運行驗證,因爲我只希望它在某種情況下(在失去焦點和取決於,當焦點在特定控件上時)。 – michelqa 2014-10-27 15:48:19

+0

由於某些原因,錯誤的工具提示未顯示......只有紅色矩形(我沒有使用特定的錯誤模板) – michelqa 2014-10-27 16:09:47

+0

是否可以更改工具提示的默認文本顏色和權重?或者是否有任何用自定義錯誤模板驗證的簡單示例? (就像在控件的右側部分驗證文本塊?(不是wpf彈出窗口)謝謝 – michelqa 2014-10-27 19:02:41