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(...)
}

Надеюсь, псевдокод поможет!

Другие вопросы по тегам