如果在构造函数中设置DataContext,那么在调用InitializeComponent()之前或之后设置它是否重要?

RLH*_*RLH 6 .net c# wpf mvvm

我有一个WPF窗口,它在它的构造函数中有一些参数.然后我使用这些构造函数来设置窗口的状态.该构造函数进程的一部分是实例化我的视图模型类,然后将其设置为窗口DataContext.

我的问题是,DataContext在调用之前或之后,我应该何时将我的视图设置为我的视图模型对象InitializeComponent()

我问,因为如果我事先设置它,那么我需要手动启动窗口初始化执行的代码,因为某些事件应该在DataContext分配或重新分配时触发.

我的假设是,如果我DataContext在调用之后设置,那么不应该有任何绑定问题,InitializeComponent()但我想在最后调用以这种方式连接我的窗口之前询问有关此问题的建议.如果我DataContext在电话会议结束后,我可能会错过一些可能会让我困扰的事情InitializeComponent()吗?

mm8*_*mm8 4

我的问题是何时应该将 DataContext 设置为等于我的视图模型对象——在调用 InitializeComponent() 之前还是之后?

除非您依赖于在调用 InitializeComponent() 期间建立的某些绑定,否则这应该不重要,例如ElementName绑定:

无法将 ItemsSource 绑定到 ElementName

InitializeComponent()方法本身定位已编译的 XAML 文件的 URI,并将其传递给LoadComponent()解析 BAML(即已编译的 XAML)的方法,并创建您在 XAML 标记中定义的元素的实例:

.xaml 和 .xaml.cs 文件之间有什么联系

只需将DataContext窗口的属性设置为视图模型类的实例(视图中的元素绑定到该视图模型类),也可以在调用该InitializeComponent()方法之后完成。无论如何,这些绑定在构造函数返回之前都不会解析。