WPF Получить реальное значение из пользовательского правила проверки - PullRequest
2 голосов
/ 10 ноября 2010

Я использую пользовательское правило проверки для проверки моих данных. Но я не могу получить доступ / определить значение свойства.

вот мой код

  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 значение «Обновлено» (для дальнейшей бизнес-логики)

Тогда возникает проблема: я не знаю, какова стоимость имущества? Потому что:

  1. Это универсальный валидатор, не может быть привязан к конкретной модели
  2. Значением параметра метода Validate является BindingExpression

Так, как я могу прочитать реальное значение?

Спасибо

Ответы [ 2 ]

1 голос
/ 31 января 2011

Если у него возникла та же проблема, и он натолкнулся на этот вопрос, ответ Гэри, похоже, был бы верным, но в нем не было исходного кода. Итак, вот моя интерпретация.

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;
    }
}
1 голос
/ 18 ноября 2010

Наконец-то мне пришла в голову эта идея.

Создание класса DummyObject: DependencyObject. Создайте общедоступную статическую DependencyProperty DummyProperty.

Затем создайте новую привязку данных, скопируйте источник, путь привязки, имя элемента, конвертер и т. Д. Из (значение как BindingExpression) .ParentBinding.

Установите новую цель привязки данных для объекта-объекта.

Затем используйте привязку к UpdateTarget ()

И теперь вы можете получить доступ к значению из свойства dummyproperty.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...