#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 /…