ContextMenu 命令绑定未随数据源更新

2024-04-05

在我的 WPF 应用程序中,有一个可以从中选择项目的列表。然后,所选项目将显示在 ContentControl 中以进行进一步交互。根据所选项目的类型(可以有多个),在 ContentControl 中使用适当的 DataTemplate。到目前为止,这对于数据处理业务应用程序来说应该没什么不寻常的。

在每个 DataTemplate 中,都有多个 TextBox 和其他控件,它们将它们的值绑定到 ViewModel 类的特定属性。当从列表中选择另一个项目时,所有这些都会按预期更新。这些按钮还在正确的 ViewModel 实例上执行命令。

有一个上下文菜单项也执行命令,但这仅适用于第一个选定的项目。当从列表中选择相同类型的另一个元素时,重新使用已加载的模板视图,上下文菜单中的命令将始终在第一个选定的项目上执行。因此绑定不会更新为 ViewModel 的正确实例。

使菜单项使用正确的 ViewModel 实例的唯一方法是选择不同类型的项目,以便将模板更改为另一个视图。只有这样上下文菜单才能正确更新。

为什么菜单项命令不会像视图中的任何其他绑定一样更新?它在加载时获取一次,但在视图的生命周期内从未更新。


不是命令绑定未更新,而是 DataContext 已过时。这是一个众所周知的问题,一旦您知道正确的搜索词......

这是带有更多链接的解释:

http://www.codeproject.com/Articles/162784/WPF-ContextMenu-Strikes-Again-DataContext-Not-Upda http://www.codeproject.com/Articles/162784/WPF-ContextMenu-Strikes-Again-DataContext-Not-Upda

这是该文章的相关部分:

解决方法是将菜单的数据上下文显式绑定到父级的数据上下文,如下所示:

<ContextMenu DataContext="{Binding PlacementTarget.DataContext,
    RelativeSource={RelativeSource Self}}">

这个神奇的咒语告诉 WPF 在菜单的数据上下文和它的“放置目标”(即父级)数据上下文之间创建永久绑定,即使父级的数据上下文发生更改,该绑定仍然可以继续工作。仅当您期望父级的数据上下文在父级生命周期内发生更改时,才需要此咒语。

我之前发现的另一个解决方案是在 Opened 事件中手动将上下文菜单的 DataContext 设置为窗口的 DataContext。这需要在代码隐藏文件中添加额外的 C# 代码,并且可能需要适应不同的场景。所以我认为上面的仅 XAML 方式更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ContextMenu 命令绑定未随数据源更新 的相关文章

  • 内容更改时 DataGridView 样式不更新

    好的 这是我的情况 我有一个DataGridView含有Messages 应用以下样式
  • WPF 重复按钮 MouseUp

    有没有办法让重复按钮上的 MouseUpevent 在不再按下按钮时触发 我试图使用 MouseMove 事件来跟踪按下按钮时鼠标的位置 但 MouseDown 和 MouseUp 都不会触发鼠标左键的事件 关于可以做什么的任何想法或建议
  • mifare 卡身份验证错误“6982:安全状态未满足”

    我有 pc sc 读卡器和非接触式卡 mifare 卡 我可以连接到该卡 并且我也成功执行 getdate 命令 但是当我想进行身份验证时 我看到此错误 6982 安全状态不满足 我已经尝试过这 3 个不同的身份验证命令 但所有这些命令都出
  • WPF DatePicker 显示时间和日期

    我有一个DatePicker对象在一个DataGrid成功显示数据库或属性中的日期
  • 画笔到画笔动画

    我设法找到了如何制作 WPF 动画 两种颜色之间的过渡 它被称为 ColorAnimation 并且效果很好 ColorAnimation animation new ColorAnimation From Colors DarkGreen
  • 在 WPF FlowDocument 中的指定位置插入超链接

    我想以编程方式将 WPF 超链接元素插入 FlowDocument 中 目标是创建一个工具栏按钮 该按钮将获取 RichTextBox 中的一系列文本并将其替换为超链接 它与您在网络上看到的用于在 wiki 或博客 或 StackOverf
  • 按名称查找控件的父级

    当在 xaml 代码中设置名称时 有没有办法通过名称找到 WPF 控件的父级 尝试这个 element VisualTreeHelper GetParent element as UIElement 在哪里 元素是 Children 您需要
  • Bash:在新终端中执行带有参数的命令[重复]

    这个问题在这里已经有答案了 所以我想在 bash 中打开一个新终端并执行带参数的命令 只要我只采取类似的东西ls作为命令它工作正常 但是当我采取类似的东西时route n 所以带参数的命令不起作用 代码 gnome terminal win
  • 使用 MahApps.Metro 时应用程序图标拉伸至标题栏高度

    使用 MahApps Metro 时如何防止应用程序图标拉伸到标题栏的高度 无论使用什么尺寸的图标 图标和标题栏边缘之间都没有空格 我也尝试过使用多尺寸图标 但这不起作用 这是一个开箱即用的示例 强烈启发自mahapps punker76
  • WPF Prism - 管理应用程序中的模块

    将 Prism 与 WPF 结合使用 我希望允许用户从存储库中选择他们想要使用的模块 每个模块本质上都是一个附加组件 选择要使用的模块只需将其移动到 DLL 的 模块 文件夹中即可加载 但是 在应用程序运行时尝试移动 DLL 时 会引发错误
  • ExtJs 5 网格存储/视图模型绑定:无法修改 ext-empty-store

    我正在为这个拔掉头发 我有一个带有一些网格 一个商店和一个 viewModel 的视图 我需要不同网格中商店的不同过滤版本 因此我尝试将每个过滤商店绑定到网格 现在我什至无法让商店加载到网格中 我的代码如下所示 Store Ext defi
  • 键盘挂钩获取组合键(WPF)

    我尝试在这里使用这篇文章 在 WPF C 中使用全局键盘钩子 WH KEYBOARD LL https stackoverflow com questions 1639331 using global keyboard hook wh ke
  • 在 Checkbox.Checked 或 Unchecked 上执行命令

    我的窗口上有一个复选框控件 我想执行一个命令来调用关联视图模型中的方法 我还需要复选框的值 我似乎找不到将命令与复选框关联起来的方法 有人这样做过吗
  • WPF 基础知识:MVVM 的共享全局样式

    我正在尝试使用 MVVM 式的方法来进行 WPF 开发 我在 ViewModel 命名空间下有我的逻辑视图模型类 并且在 View 命名空间下有这些视图模型类的匹配样式 现在 我的视图信息位于 ResourceDictionary XAML
  • 静态/动态类型与静态/动态绑定

    大家这4个术语有什么区别 能举个例子吗 Static and dynamic是指解决某些编程元素的时间点的行话 Static表示解析是在程序构建时发生的 Dynamic表示解析是在程序运行时发生的 静态和动态打字 Typing指由于数据值之
  • DependencyProperty 值未通过数据绑定设置

    我有一堂课有一个DependencyProperty member public class SomeClass FrameworkElement public static readonly DependencyProperty Some
  • WPF 与分辨率无关

    如果我将所有内容放入 viewbox 容器中 那么我的 wpf 应用程序将与分辨率无关 或者我需要执行其他操作吗 请帮助概念 根据可用屏幕或中等尺寸缩放 元素如果您希望始终填充屏幕或输出设备的某些空间 而与指标无关 那么使用视图框是一个不错
  • wpf 调试错误输出 System.WIndows.Data 错误 25

    我有一个自定义样式的组合框 效果很好 它被放置在用户控件内并绑定到数据结构 我使用 DisplayMemberPath 仅显示组合框文本框中的一个元素 ComboBox 样式取自 MSDN 并被多次使用 所以这里就不显示了
  • 带有 TextWrapping 的 WPF CheckBox 样式

    我需要申请一个TextWrapping在 WPF 中CheckBox 请看这两个示例
  • WPF 绑定默认模式

    在我的一个应用程序中 我有这样的代码

随机推荐