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