WPF自定义控件数据绑定出现的问题
测试发现,父控件构造函数中初始化界面的部分会完成子控件与父控件ViewModel
的数据绑定。因此,如果在父控件构造函数执行前初始化父控件ViewModel
中的属性,将导致在子控件执行OnApplyTemplate
时无法获取到绑定的改属性。因此,需要尽量避免在父控件构造前构造父控件的ViewModel
。
正常情况下,ViewModel
的初始化都会在控件构造后。我遇到这个问题是由于使用DataTemplate+ViewModel
进行控件切换,需要提前初始化ViewModel
作为DateTemplate
选择View
的依据。
我发现TextBox
这类原生框架并不会因为这种顺序的差异而出现问题,本质上还是自己写的自定义控件存在缺陷。日后我会继续寻找这个缺陷,现在出现的这个问题,我会通过在父控件InitializeComponent()
方法前再次初始化ViewModel
中属性的方式解决。