PropertyChangedCallback вызывается до OnApplyTemplate в WinRT
Я создаю WinRT CustomControl, который имеет свойство зависимости с PropertyChangedCallback. В этом методе Callback я пытаюсь установить значения в некоторых частях элемента управления, которые я получаю из OnApplyMethod, используя метод GetTemplateChild().
Проблема в том, что PropertyChangedCallback вызывается перед OnApplyTemplate, поэтому элементы управления по-прежнему равны нулю.
Один из обходных путей, который я нашел, - это вызов этого DP в событии load моего Custom Control. В этом случае у меня все работает нормально. Но в каждой ситуации это не применимо. Предположим, что если кто-то хочет связать значения через xaml, проблема снова возникает.
У кого-нибудь есть постоянное решение этой проблемы.
1 ответ
Вот общая схема, которой я следую, когда хочу сделать то, что вы описали:
private void OnFooChanged(...)
{
if (someNamedPart != null && someOtherNamedPart != null && ...)
{
// Do something to the named parts that are impacted by Foo
// when Foo changes.
}
}
private void FooChangedCallback(...)
{
// Called by WinRT when Foo changes
OnFooChanged(...)
}
protected override void OnApplyTemplate(...)
{
// Theoretically, this can get called multiple times - every time the
// consumer of this custom control changes the template for this control.
// If the control has named parts which must react to the properties
// this control exposes, all that work must be done here EVERY TIME
// a new template is applied.
// Get and save named parts as local variables first
OnFooChanged(...)
}
Надеюсь, псевдокод поможет!