У меня есть следующие настройки WPF-MVVM:данных в C# WPF MVVM проверки
- Вид с 2 TextFields связанными с свойствами ViewModel с UpdateSourceTrigger = PropertyChanged и кнопки с командой связывания с командой реле (CanExecute, Execute methods)
- ViewModel, который реализует INotifyDataErrorInfo с 2 свойствами, аннотированными с помощью [System.ComponentModel.DataAnnotations.Required]. Свойство setter вызывает частный метод ViladateProperty, который сохраняет результаты проверки в словаре ошибок. Свойство HasErrors getter проверяет словарь ошибок, чтобы вернуть соответствующее значение.
Цель состоит в том, чтобы включить кнопку, как только вся форма проверяется правильно. Мои два вопроса по этому поводу являются:
- Как реализовать метод CanExecute команды реле кнопки без вызова проверки на всей модели для каждого изменения свойств?
- Каков наилучший способ «задержать» UpdateSourceTrigger для установки соответствующего свойства не на каждое нажатие клавиши, но, например, через одну секунду «без ввода»?
Благодарим вас за ответ на второй вопрос! О первом вопросе - мой обработчик CanExecute ссылается только на HasErrors, как вы описали. Точка является стратегией проверки: Если вы проверяете все свойства при каждом изменении свойств, второй текстовый файл (без ввода) становится недействительным, как только первый становится пустым и наоборот. Если вы проверяете только измененное свойство, вы можете получить недопустимую форму, поскольку другое текстовое поле не было проверено. Вопрос заключается в том, как проверить все свойства, не проверяя их при каждом изменении свойств. – toppless
Я не уверен, как вы проверили свою проверку, даже если вы говорите о проверке бизнес-правил или просто проверке типа данных, но я вообще не манипулирую элементами управления пользовательским интерфейсом, когда данные становятся недействительными. Я просто заставляю всю форму светиться красным цветом и отображать точные сообщения об ошибках в коллекции в пользовательском интерфейсе, которые пользователь может исправить. – Sheridan
Это более общий вопрос: когда вызывать проверку всей формы (чтение: проверка на каждое свойство), если вы проверяете одно свойство при изменении события этого свойства? – toppless