2014-10-27 109 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