【发布时间】:2017-07-11 04:50:33
【问题描述】:
我有一个 WPF 窗口,它在其构造函数中接受了一些参数。然后我使用这些构造函数来设置窗口的状态。该构造函数过程的一部分是实例化我的视图模型类,然后将其设置为窗口DataContext。
我的问题是我应该什么时候将我的DataContext 设置为等于我的视图模型对象——在调用InitializeComponent() 之前还是之后?
我问是因为如果我事先设置它,那么我需要手动启动在窗口初始化之后执行的代码,因为在分配DataContext 时应该触发某些事件,或者重新分配。
我的假设是,如果我在调用 InitializeComponent() 之后将 DataContext 设置为不应该有任何绑定问题,但我想在最后调用连接我的窗口之前就此事征求意见这边走。如果我在调用InitializeComponent() 后设置我的DataContext,我是否会错过一些可能会回来困扰我的东西?
【问题讨论】:
-
您回答了您的问题,在调用
InitializeComponents()(加载/解析/处理 xaml 的任务)之前设置DataContext将需要刷新(例如,将其设置为null然后返回),所以必须在之后设置。 -
我总是在 InitializeComponent 之后设置 DataContext,从来没有遇到过与该事实严格相关的任何问题。
-
我的建议是以不同的方式处理它:不要在窗口内设置窗口数据上下文。相反,在窗口内的子元素(例如网格)上设置数据上下文,并在 Window.Loaded 事件中进行,而不是在构造函数中进行。但是,如果我没记错的话,这与 UserControl 比与 Window 更相关,而且我只是将这种方法作为一种习惯进行了调整。
-
@grek40 我明白你在解释什么,但请解释为什么这是(可能)正确的方法。实际上,请简要回答我的问题,但请在答案中解释您的建议。如果我看到优点,我会给你答案。谢谢。
-
也许我可以稍后再写一个答案,现在时间不够,需要重新检查一些细节,才能确定答案是否有价值。