Наблюдаемый валидатор не работает в wpf

Я работаю в приложении 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 принимает символы в каждом диапазоне, а также принимает пустые значения.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
128
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Убедитесь, что привязка работает. Установка свойства ValidatesOnDataErrors привязки в true не требуется:

<TextBox Text = "{Binding Name, UpdateSourceTrigger=PropertyChanged,
    ValidatesOnDataErrors=True}"/>

Я пробовал это тоже, но это не сработало.

Ihsan Sadat 31.10.2022 16:24

Это, безусловно, делает для меня. Вы подтвердили, что ваша привязка работает?

mm8 31.10.2022 16:25

Да, привязка работает правильно, но не работает валидация

Ihsan Sadat 31.10.2022 16:28

Значит, вы не видите шаблон ошибки по умолчанию? Или какой проверки вы ожидаете здесь?

mm8 31.10.2022 16:29

Я хочу показать ошибку, когда мы оставляем текстовое поле пустым или менее 3 символов. Не важно, какая ошибка, просто ошибка, если это будет форма всплывающего окна, это будет хорошо.

Ihsan Sadat 31.10.2022 16:37

Шаблон ошибки по умолчанию рисует красную рамку вокруг TextBox. Вы должны увидеть его, если не возились со стилем или шаблоном.

mm8 31.10.2022 16:39

Я использую в своем проекте Material_Design и handy_Controls, думаю проблема будет из-за этого. Что я должен делать?

Ihsan Sadat 31.10.2022 16:50

Что я должен делать?" Возможно, попробуйте, будет ли это работать в простом xaml без участия Material_Design и handy_Controls

Stefan Wuebbe 31.10.2022 18:17

Я попробовал ваше решение в новом проекте, но оно не работает.

Ihsan Sadat 31.10.2022 18:57

Спасибо @mm8 Я решил свою проблему, но теперь у меня другая проблема, здесь не отображается сообщение об ошибке. Не могли бы вы помочь мне, я обновил свой вопрос.

Ihsan Sadat 01.11.2022 10:35

@IhsanSadat: Пожалуйста, задайте новый вопрос, если у вас есть другая проблема. Не редактируйте ответ.

mm8 02.11.2022 15:28
Ответ принят как подходящий

Спасибо! Мистер @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}"/>

Другие вопросы по теме