То, что у меня есть на данный момент: приложение WPF, использующее MVVM, реализовано IDataErrorInfo.Все работает, как и ожидалось.
Каждый раз, когда я открываю диалоговое окно «Создать новую сущность», пользователю приветствуется приятная форма, повсюду мигая красным.Это ожидается с точки зрения чистой проверки, но это раздражает, и я хотел бы иметь возможность сделать одно из двух:
- «Смягчить» красный цвет выделения ошибок, скажем такоранжевый или желтый, чтобы указать «Обязательное поле».Впоследствии, когда пользователь начинает взаимодействовать с элементами управления, переключитесь на красную подсветку
- Если это невозможно, есть ли способ отключить подсветку ошибок @ начальное состояние?
Я нашел этоpost Как я могу заставить WPF НЕ отображать ошибки проверки при первоначальном отображении элемента управления? Имеется проблема с той же проблемой, но на самом деле это не ответ.
Я рассмотрел реализацию «Очистить все ошибки» в моей реализации IDataErrorInfo, а также реализацию флага InitialState, поэтому ошибки не будут добавляться до тех пор, пока пользователь не изменит хотя бы одно поле, но они имеют побочные эффекты.,
- Если после init удалить все ошибки, проверка отключена, но кнопка отправки, конечно, включена: (
- Если я использую флаг InitialState, который такжепривязан к кнопке отправки, чтобы отключить его ... Я получаю еще один шаг вперед, но затем добавляются ВСЕ ошибки с изменением в одном поле свойства.
Итак, прежде чем идти и добавлять флаги InitStateКАЖДОЕ свойство, хотя я останавливаюсь и спрашиваю, может ли быть более простое, более общее решение для этого.
Я могу опубликовать некоторый код, если требуется. Однако я реализую IDataErrorInfo стандартным способом, Dictionary<string,string>
для сообщений об ошибках: поля свойств с событиями OnChange и оператор переключения регистра для вызова отдельных методов проверки.
РЕДАКТИРОВАТЬ: Вот что я закончил.
- Я добавилфлаг
IsInitState=true
для каждого свойства поля 'Обязательное' в виртуальной машине В коде установщика этот флаг имеет значение false при первом изменении
if (Name != value)
{
Name = value;
IsInitState_Name = false;
base.OnPropertyChanged("Name");
}
В ValidateName (), тест Null / empty является условным на основе флага
if (! IsInitState_Name && String.IsNullOrEmpty (this.Name)) *
Отправить кнопку "canExecute"проверяет, все ли флаги == false перед разрешением submit
Это некоторая дополнительная работа, но необходимая только для "обязательных / ненулевых" свойств.Теперь интерфейс Создать новый изначально без сообщений об ошибках, но проверка полностью функционирует