Использовать ValidatesOnDataErrors для свойства пользовательского элемента управления

#wpf #validation #binding #dependency-properties

#wpf #проверка #привязка #зависимость-свойства

Вопрос:

У меня есть модель представления, которая реализует IDataErrorInfo, которая имеет реализацию проверки. У меня также есть пользовательский элемент управления, который содержит метку и текстовое поле. Когда я использую ValidatesOnDataErrors=True для свойства Text моего элемента управления, если текст недопустим, весь элемент управления становится красным (даже метка). Как я могу обработать ошибку проверки внутри моего пользовательского элемента управления, чтобы только текстовое поле стало красным?

 <controls:TextBoxControl Label="Test:"
                         Text="{Binding PersonalModel.Test, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
  

И моя реализация элемента управления имеет свойство зависимости:

 public static readonly DependencyProperty TextProperty =
         DependencyProperty.Register("Text", typeof(string), typeof(TextBoxControl),
              new FrameworkPropertyMetadata(default(string), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }
  

Комментарии:

1. Вам понадобится привязка в текстовом поле. И это должно иметь как минимум NotifyOnValidationError=»True» для его привязки. Но я думаю, что ваш дизайн — плохая идея.

2. У меня есть привязка в моем пользовательском элементе управления для текстового поля. Я попытаюсь добавить NotifyOnValidationError, чтобы посмотреть, что произойдет. Почему вы говорите, что это плохая идея?

3. Если вы помечаете элементы управления, то imo, вам лучше использовать contentcontrol. Затем вы можете поместить в него текстовое поле, флажок, кнопку, что угодно. И вы бы не создали границу вокруг своего текстового поля.

4. Это звучит умнее, чем моя реализация. У вас есть пример или ссылка с чем-то подобным?

5. См. editrow здесь social.technet.microsoft.com/wiki/contents/articles /…