Установить сообщение проверки для контроля вручную - PullRequest
1 голос
/ 11 ноября 2010

Я пытаюсь установить сообщение проверки вручную без общепринятой практики, когда вы генерируете исключение.

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

VisualStateManager.GoToState(this.TextBox, "InvalidFocused", true);

Теперь я просто хочу установить сообщение об ошибке вручную ... Кто-нибудь знает как?

Я знаю, что это ХАК, но это то, что мне нужно на данный момент.

Есть идеи ???

1 Ответ

1 голос
/ 07 марта 2011

Вот решение .... найдено это сообщение.

public object Value
{
   get { return (object)GetValue(ValueProperty); }
   set 
   {
      if (value.ToString() == "testing")
      {
          SetControlError(this, "This is an invalid value.");
      }
      else
      {
          ClearControlError(this);
          SetValue(ValueProperty, value);
      }
   }
}

public void ClearControlError(Control control)
{
   BindingExpression b = control.GetBindingExpression(Control.TagProperty);

   if (b != null)
   {
      ((ControlValidationHelper)b.DataItem).ThrowValidationError = false;
      b.UpdateSource();
   }
}       


 public void SetControlError(Control control, string errorMessage)
 {
    ControlValidationHelper validationHelper =
                new ControlValidationHelper(errorMessage);

    control.SetBinding(Control.TagProperty, new Binding("ValidationError")
    {
       Mode = BindingMode.TwoWay,
       NotifyOnValidationError = true,
       ValidatesOnExceptions = true,
       UpdateSourceTrigger = UpdateSourceTrigger.Explicit,
       Source = validationHelper
    });

    // this line throws a ValidationException with your custom error message;
    // the control will catch this exception and switch to its "invalid" state
    control.GetBindingExpression(Control.TagProperty).UpdateSource();
}

// Помощник класса

using System.ComponentModel.DataAnnotations;
public class ControlValidationHelper
{
    private string _message;

    public ControlValidationHelper(string message)
    {
        if (message == null)
        {
            throw new ArgumentNullException("message");
        }

        _message = message;
        ThrowValidationError = true;
    }

    public bool ThrowValidationError
    {
        get;
        set;
    }

    public object ValidationError
    {
        get { return null; }
        set
        {
            if (ThrowValidationError)
            {
                throw new ValidationException(_message);
            }
        }
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...