我有一个基于MVVM模式的WPF应用程序。左侧有一棵树,右侧有一个细节区域。树包含各种类型的对象,我有每种类型的视图模型。在视图中,我为每个视图模型类型提供了不同的数据模板(包含用户控件)。然后根据当前详细信息视图通过数据绑定选择视图。
现在,当我在树节点之间切换时,我还为每个节点实例化一个新的详细信息视图模型,并相应地更改视图,同时触发DataContextChanged事件和Loaded事件。也就是说,直到我开始在相同类型的对象之间切换。在这里,详细信息视图模型也会更新,但视图实例保持不变。这意味着,只触发DataContextChanged事件,而不是Loaded事件。
有没有办法强制Loaded事件触发,例如,通过重新初始化视图?
我需要Loaded事件的原因是WPF在数据绑定期间触发输入控件上的选择更改事件,因为我有逻辑作用于用户触发的选择更改事件,我需要能够忽略那些触发的事件数据绑定。目前,Loaded事件似乎是执行此操作的最佳选择。除了描述的问题。
谢谢,迈克尔
答案 0 :(得分:0)
如果需要在每次数据上下文更改时运行,请将Loaded处理程序中的任何逻辑移动到DataContextChanged处理程序。