Поскольку WPF автоматически не перезагружается из источника привязки после обновления источника. Вероятно, это отчасти связано с производительностью, но в основном для обработки ошибок связывания. Например, рассмотрим TextBox, связанный с целочисленным свойством. Предположим, что пользователь вводит 123A. WPF хочет продолжить показ того, что пользователь набрал, чтобы они могли его исправить, вместо того, чтобы внезапно сбросить содержимое TextBox к старому значению свойства.
Поэтому, когда вы нажимаете CheckBox, WPF предполагает, что он должен продолжать отображать состояние control , а не перепроверять привязанное свойство.
Единственный способ, который я нашел в связи с этим, что не очень элегантно, - вызывать PropertyChanged после WPF после вызова метода установки свойств. Это можно сделать с помощью Dispatcher.BeginInvoke:
set
{
// ...actual real setter logic...
Action notify = () => NotifyPropertyChanged(...);
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, notify);
}
Это можно сделать немного менее ужасно, объединив его в реализацию NotifyPropertyChanged, чтобы вам не пришлось загрязнять отдельные свойства этой проблемой реализации. Вы также можете использовать NotifyOnSourceUpdated и прикрепленное событие SourceUpdated, но я не исследовал эту возможность.