測試發現,父控件構造函數中初始化界面的部分會完成子控件與父控件ViewModel的數據綁定。因此,如果在父控件構造函數執行前初始化父控件ViewModel中的屬性,將導致在子控件執行OnApplyTemplate時無法獲取到綁定的改屬性。因此,需要盡量避免在父控件構造前構造父控件的ViewModel。
正常情況下,ViewModel的初始化都會在控件構造后。我遇到這個問題是由於使用DataTemplate+ViewModel進行控件切換,需要提前初始化ViewModel作為DateTemplate選擇View的依據。
我發現TextBox這類原生框架並不會因為這種順序的差異而出現問題,本質上還是自己寫的自定義控件存在缺陷。日后我會繼續尋找這個缺陷,現在出現的這個問題,我會通過在父控件InitializeComponent()方法前再次初始化ViewModel中屬性的方式解決。
