WPF MVVM : View is not reloaded when ViewModel is changed

标签 wpf mvvm datatemplate

我有一个基于 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/

相关文章:

wpf - 在 XAML 中包装另一个控件的控件模板

c# - 如何在 C# 中退出非 void 方法

c# - 从 CodeBehind 访问 DataTemplate 中的 XAML 控件?

wpf - 如何将 ObservableCollection 绑定(bind)到 DataTemplate 中的文本框?

wpf - 选择 ListBoxItem 时,如何将焦点设置到 ItemTemplate 中的控件?

c# - 最简单的WPF/C#调试方法查看是怎么回事

c# - WPF 快速转换器 : Hide element on empty list

wpf - 如何将Textbox的内容保存到文本文件中

c# - 多个 View 的相同命令

wpf - 如何重用 wpf/mvvm 中的内容