Программная установка привязанного свойства в результате выбора значения в другом элементе управления - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть приложение c # winforms с множеством различных элементов управления, которые связаны (через bindingsource) с различными свойствами моего бизнес-объекта (и этот объект реализует INotifyPropertyChanged). Когда мой пользователь устанавливает определенный элемент управления на определенное значение, мне нужно изменить значение другого свойства (в коде) и, возможно, даже отключить элемент управления, который привязывается к этому свойству. Например, у меня есть datetimepicker, который отображается на свойство datetime. Если мой пользователь вводит значение времени меньше 00:10:00 (ЧЧ: ММ: СС), мне нужно снять флажок (который привязан к свойству bool). В настоящее время у меня есть код в проверяющем обработчике событий, который просматривает значение в datetimepicker, и если .Hour == 0 и .Minute <10, я программно устанавливаю значение свойства bool (с которым связан флажок) равно ложному. Когда я делаю это, флажок становится непроверенным, но значение в datetimepicker возвращается к тому, что было до того, как пользователь ввел время, в результате которого булевому свойству было присвоено значение false. </p>

Если я наблюдаю значение datetimepicker в отладчике, оно сбрасывается после выполнения этой строки кода:

businessObject.booleanVariable = false;

Нужно ли что-то делать, чтобы принудительно возвращать значение datetimepicker в свойство объекта, прежде чем программно установить логическое свойство в false?!? Или я все об этом говорю не так? Есть ли другой способ, которым должны обрабатываться связанные элементы управления, которые могут повлиять на другие связанные элементы управления?

1 Ответ

1 голос
/ 13 сентября 2011

Событие Validating инициирует до того, как данные отправляются обратно в связанный объект. Его цель - дать вам возможность убедиться, что элемент управления содержит данные, которые действительны в соответствии с бизнес-логикой, и использование его для обработки обычной (не проверяющей) логики вызовет проблемы, которые вы видите.

Лучшим вариантом было бы добавить код в установщик вашего свойства, который устанавливает свойство bool.

...