Я работаю в приложении wpf mvvm, а также использую Community toolkit.mvvm. Здесь я реализую валидатор Observable для текстовых полей, но это не влияет на пользовательский интерфейс,
ViewModel:
public partial class UserViewModel : ObservableValidator
{
[ObservableProperty]
[Required(ErrorMessage = "Name is Required")]
[MinLength(3)]
private string name= "";
}
Xaml:
<TextBox Text = "{Binding Name,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
Когда я печатаю в текстовом поле менее 3 символов и оставляю его, это не влияет, TextBox принимает символы в каждом диапазоне, а также принимает пустые значения.





Убедитесь, что привязка работает. Установка свойства ValidatesOnDataErrors привязки в true не требуется:
<TextBox Text = "{Binding Name, UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}"/>
Это, безусловно, делает для меня. Вы подтвердили, что ваша привязка работает?
Да, привязка работает правильно, но не работает валидация
Значит, вы не видите шаблон ошибки по умолчанию? Или какой проверки вы ожидаете здесь?
Я хочу показать ошибку, когда мы оставляем текстовое поле пустым или менее 3 символов. Не важно, какая ошибка, просто ошибка, если это будет форма всплывающего окна, это будет хорошо.
Шаблон ошибки по умолчанию рисует красную рамку вокруг TextBox. Вы должны увидеть его, если не возились со стилем или шаблоном.
Я использую в своем проекте Material_Design и handy_Controls, думаю проблема будет из-за этого. Что я должен делать?
Что я должен делать?" Возможно, попробуйте, будет ли это работать в простом xaml без участия Material_Design и handy_Controls
Я попробовал ваше решение в новом проекте, но оно не работает.
Спасибо @mm8 Я решил свою проблему, но теперь у меня другая проблема, здесь не отображается сообщение об ошибке. Не могли бы вы помочь мне, я обновил свой вопрос.
@IhsanSadat: Пожалуйста, задайте новый вопрос, если у вас есть другая проблема. Не редактируйте ответ.
Спасибо! Мистер @mm8
Я просто пропустил атрибут --> [NotifyDataErrorInfo].
Теперь он работает правильно.
ViewModel:
public partial class UserViewModel : ObservableValidator
{
[ObservableProperty]
[NotifyDataErrorInfo]
[Required(ErrorMessage = "Name is Required")]
[MinLength(3, ErrorMessage = "Name Should be at least 3 character")]
private string username;
}
Xaml:
<TextBox Text = "{Binding Username, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
Я пробовал это тоже, но это не сработало.