У меня есть UserControl с одной Textbox
внутри сетки, как это:Проверка свойства зависимостей с INotifyDataErrorInfo
<TextBox Text="{Binding Username}"></TextBox>
Код фоновым от UserControl реализует INotifyDataErrorInfo
и INotifyPropertyChanged
. Это как мой код-за выглядит (помимо указанных выше реализаций интерфейса)
public TestControl()
{
InitializeComponent();
this.DataContext = this;
}
private string _username;
public string Username
{
get { return _username; }
set
{
_username = value;
if (_username.Length < 3)
SetErrors("Username", new List<string> { "Usernames should be at least 3 characters long" });
OnPropertyChanged("Username");
}
}
Где SetErrors
это просто функция, которая добавляет ошибку в IEnumerable
которой INotifyDataErrorInfo.GetErrors
вернется. Это работает очень хорошо. Когда я пишу текст менее 3 символов, текстовое поле становится красным. Это именно то, чего я ожидаю.
Теперь я хочу, чтобы режим просмотра MainWindow устанавливал это текстовое поле. Для этого поле Username
должно быть свойством зависимостей, поэтому я могу привязываться к нему. Но проблема в том, что я не могу подтвердить это сейчас. Я сделал свойство зависимостей и попытался проверить его на ValidateValueCallback
, но члены INotifyDataErrorInfo
не являются статическими. Поэтому я не могу связаться с ними. Что мне делать?
Я хочу, чтобы моя логика проверки оставалась в моем UserControl ... Кстати, как насчет использования 'nameof' вместо' CallerMemberName'? –