Есть ли способ отключить или «смягчить» визуальные эффекты ошибок валидации в исходном состоянии? - PullRequest
4 голосов
/ 11 октября 2011

То, что у меня есть на данный момент: приложение WPF, использующее MVVM, реализовано IDataErrorInfo.Все работает, как и ожидалось.

Каждый раз, когда я открываю диалоговое окно «Создать новую сущность», пользователю приветствуется приятная форма, повсюду мигая красным.Это ожидается с точки зрения чистой проверки, но это раздражает, и я хотел бы иметь возможность сделать одно из двух:

  1. «Смягчить» красный цвет выделения ошибок, скажем такоранжевый или желтый, чтобы указать «Обязательное поле».Впоследствии, когда пользователь начинает взаимодействовать с элементами управления, переключитесь на красную подсветку
  2. Если это невозможно, есть ли способ отключить подсветку ошибок @ начальное состояние?

Я нашел этоpost Как я могу заставить WPF НЕ отображать ошибки проверки при первоначальном отображении элемента управления? Имеется проблема с той же проблемой, но на самом деле это не ответ.

Я рассмотрел реализацию «Очистить все ошибки» в моей реализации IDataErrorInfo, а также реализацию флага InitialState, поэтому ошибки не будут добавляться до тех пор, пока пользователь не изменит хотя бы одно поле, но они имеют побочные эффекты.,

  1. Если после init удалить все ошибки, проверка отключена, но кнопка отправки, конечно, включена: (
  2. Если я использую флаг InitialState, который такжепривязан к кнопке отправки, чтобы отключить его ... Я получаю еще один шаг вперед, но затем добавляются ВСЕ ошибки с изменением в одном поле свойства.

Итак, прежде чем идти и добавлять флаги InitStateКАЖДОЕ свойство, хотя я останавливаюсь и спрашиваю, может ли быть более простое, более общее решение для этого.

Я могу опубликовать некоторый код, если требуется. Однако я реализую IDataErrorInfo стандартным способом, Dictionary<string,string> для сообщений об ошибках: поля свойств с событиями OnChange и оператор переключения регистра для вызова отдельных методов проверки.

РЕДАКТИРОВАТЬ: Вот что я закончил.

  1. Я добавилфлаг IsInitState=true для каждого свойства поля 'Обязательное' в виртуальной машине
  2. В коде установщика этот флаг имеет значение false при первом изменении

            if (Name != value)
            {
                Name = value;
                IsInitState_Name = false; 
                base.OnPropertyChanged("Name");
            }
    
  3. В ValidateName (), тест Null / empty является условным на основе флага

    if (! IsInitState_Name && String.IsNullOrEmpty (this.Name)) *

  4. Отправить кнопку "canExecute"проверяет, все ли флаги == false перед разрешением submit

  5. Это некоторая дополнительная работа, но необходимая только для "обязательных / ненулевых" свойств.Теперь интерфейс Создать новый изначально без сообщений об ошибках, но проверка полностью функционирует

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

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

Например, когда новый класс создается, для флага ShouldValidate по умолчанию установлено значение false. Если новый класс уже существует, например, извлекая его данные из базы данных, установите флаг ShouldValidate на true. Когда пользователь выполняет команду Save, установите для ShouldValidate значение true, если оно равно false.

Если у вашего класса также есть свойство IsValid, то перед выполнением кода проверки установите для ShouldValidate значение true, поскольку, как правило, если вы вызываете IsValid, вы обычно ожидаете выполнения проверки элемента управления мои проверяющие классы имеют это свойство, и я обычно проверяю IsValid перед сохранением)

0 голосов
/ 11 октября 2011

Один из вариантов - не считать начальное «пустое» состояние недопустимым (таким образом, чтобы пользовательский интерфейс не отображал ошибку), а выполнить отдельный набор проверок (включая непустые), прежде чем разрешить фиксацию.В этом случае вы можете установить ошибку для каждого свойства, которое было «пустым» при попытке фиксации.Одним из следствий этого является то, что если сделать поле пустым, отредактировав текст, все ошибки в нем будут удалены, но это может быть не слишком страшно.

0 голосов
/ 11 октября 2011

вот шаблон ControlTemplate, который я использую с менее резким красным цветом, и всплывающая подсказка для отображения сообщений об ошибках проверки;пример для ComboBox, но он одинаков для TextBox и т. д.было слишком долго для комментария, поэтому я все равно превратил его в aswer ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...