Забавно, что после дня поиска без везения и, наконец, отправил мой вопрос, вдруг я нашел еще один поток, который говорит ту же самую проблему с ответом -> Thread с ответом
Чтобы повторить, очевидно, INotifyPropertyChanged
по-прежнему является ответом на мою проблему. Разница в том, что я раньше подписывался на событие в конструкторе ContainerClass
. Что-то вроде:
public ContainerClass()
{
NestedClassInstance.PropertyChanged += delegate { this.Invalidate(); };
}
Хотя очевидно, что нужно сделать, это подписаться или повторно подписаться на это событие в телережиме NestedClass
. Что-то вроде:
public class ContainerClass : Control
{
private NestedClass _nestedClassInstance = new NestedClassInstance();
public NestedClass NestedClassInstance
{
get => _nestedClassInstance;
set
{
if (_nestedClassInstance != null)
_nestedClassInstance.PropertyChanged -= delegate { this.Invalidate(); };
_nestedClassInstance = value;
_nestedClassINstance.PropertyChanged += delegate { this.Invalidate(); };
}
}
}
Там у вас есть. Конец другого маршрута кодирования.
EDIT: На самом деле я все еще думаю, является ли это фактическим решением или нет, поскольку, если мы имеем в виду метаданные класса Font, он не обязательно использует INotifyProperty
или любой другой вид EventHandler для события с измененным свойством. Но в любом случае это делает трюк.