在我的 WPF 应用程序中,有一个列表可以从中选择一个项目。然后,所选项目将显示在 ContentControl 中以进行进一步交互。根据所选项目的类型(可以有多个),在 ContentControl 中使用适当的 DataTemplate。到目前为止,这对于数据处理业务应用程序来说应该没有什么不寻常的。
在每个 DataTemplate 中,有多个 TextBox 和其他控件,它们将它们的值绑定到 ViewModel 类的特定属性。从列表中选择另一个项目时,所有这些都按预期更新。这些按钮还在 ViewModel 的正确实例上执行它们的命令。
有一个上下文菜单项也执行命令,但这仅适用于第一个选定项。当从列表中选择另一个相同类型的元素时,重新使用已加载的模板视图,上下文菜单中的命令将始终在第一个选择的项目上执行。因此绑定不会更新为正确的 ViewModel 实例。
使菜单项使用正确的 ViewModel 实例的唯一方法是选择不同类型的项,以便将模板更改为另一个视图。只有这样上下文菜单才能正确更新。
为什么菜单项命令不会像视图中的任何其他绑定一样更新?它在加载时获取一次,但在视图的生命周期内从未更新。