PropertyChangedCallback在WinRT中的OnApplyTemplate之前调用

时间:2014-01-25 03:09:11

标签: c# windows-8 windows-runtime propertychanged

我正在创建一个WinRT CustomControl,它具有PropertyChangedCallback的依赖属性。在那个Callback方法中,我尝试使用GetTemplateChild()方法设置我从OnApplyMethod检索的一些控件部分的值。

问题是在OnApplyTemplate之前调用了PropertyChangedCallback,因此控件部分仍为空。

我发现一个解决方法是我在自定义控件的加载事件中调用此DP。在那种情况下,一切都适合我。但是每种情况都不适用。假设有人想要通过xaml绑定值,问题再次引发。

是否有任何针对此问题的永久性解决方法。

1 个答案:

答案 0 :(得分:4)

这是我想要做你所描述的一般模式:

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

希望伪代码有帮助!