2010-11-10 55 views
2

我使用自定义验证规则来验证我的数据。但我无法访问/确定属性值。WPF从自定义验证规则中获取实际值

这里是我的代码

public class MandatoryRule: ValidationRule 
{ 
    public MandatoryRule() 
    { 
     ValidationStep = System.Windows.Controls.ValidationStep.UpdatedValue; 
    } 

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     BindingExpression exp = value as BindingExpression; 

     if (value == null) 
      return new ValidationResult(true, null); 

     return new ValidationResult(true, null); 
    } 
} 

我需要设置ValidationStep到UpdatedValue(用于进一步的业务逻辑)

于是问题来了:我不知道什么是属性值?因为:

  1. 它是一个通用的验证,无法绑定到特定模型
  2. 在验证方法的参数值是BindingExpression

所以,我怎么能读的真正价值?

感谢

回答

1

最后,我想出了这个主意。

创建一个类DummyObject:DependencyObject。 创建一个公共静态DependencyProperty DummyProperty。

然后创建一个新的数据绑定,从(值为BindingExpression).ParentBinding复制源,绑定路径,元素名称,转换器等。

将新的数据绑定目标设置为dummyobject。

然后用结合UpdateTarget()

现在你可以从dummyproperty访问值。

1

有同样的问题,并且出现了这个问题,加里的答案似乎是要走的路,但它缺乏源代码。所以这是我的解释。

public class BindingExpressionEvaluator : DependencyObject 
{ 
    public object Value 
    { 
     get { return (object)GetValue(ValueProperty); } 
     set { SetValue(ValueProperty, value); } 
    } 

    public static readonly DependencyProperty ValueProperty = 
     DependencyProperty.Register("ValueProperty", typeof(object), 
     typeof(BindingExpressionEvaluator), new UIPropertyMetadata(null)); 

    public static object Evaluate(BindingExpression expression) 
    { 
     var evaluator = new BindingExpressionEvaluator(); 
     var binding = new Binding(expression.ParentBinding.Path.Path); 
     binding.Source = expression.DataItem; 
     BindingOperations.SetBinding(evaluator, BindingExpressionEvaluator.ValueProperty, binding); 
     var value = evaluator.Value; 
     BindingOperations.ClearBinding(evaluator, BindingExpressionEvaluator.ValueProperty); 
     return value; 
    } 
}