2011-01-26 256 views
1

我有一个基于MVVM模式的WPF应用程序。它左侧有一棵树,右侧有一个细节区域。树包含各种类型的对象,我有每种类型的视图模型。在视图中,我为每个视图模型类型都有一个不同的数据模板(包含用户控件)。然后根据当前详细信息视图通过数据绑定选择视图。WPF MVVM:视图模型更改时不重新加载视图

现在,当我在树节点之间切换时,我还为每个节点实例化一个新的细节视图模型,并且视图相应地发生改变,同时触发DataContextChanged事件和Loaded事件。也就是说,直到我开始在相同类型的对象之间切换。在这里,细节视图模型也会得到更新,但视图实例保持不变。这意味着,只有DataContextChanged事件被激发,但不是Loaded事件。

有没有办法强制Loaded事件触发,例如,通过重新初始化视图?

我需要Loaded事件的原因是WPF在数据绑定期间触发了输入控件上的选择更改事件,并且由于我的逻辑对用户触发的选择更改事件起作用,因此我需要能够忽略触发的事件通过数据绑定。目前,Loaded事件似乎是做到这一点的最佳选择。所描述的问题的除外。

谢谢,迈克尔

+1

听起来像是一个糟糕的设计,如果您需要任何SelectionChanged事件,您应该能够将细节视图直接绑定到所选项目。特别是你需要不同的行为来绑定选择的变化听起来颇为腥意。除此之外,如果您发布一些简化的问题代码,这将会很有帮助。 – 2011-01-26 11:20:15

+0

请发布您的代码,重现上述问题。 – 2011-01-26 13:18:23

回答

0

移动任何逻辑必须在加载的处理程序的DataContextChanged仅处理程序是否需要运行的每个数据环境的变化时间。