c# - IsChecked 绑定(bind)在 ContextMenu 的 MenuItem 中不起作用

标签 c# wpf contextmenu

我有一个 MVVM 应用程序并想添加一个上下文菜单。

我将 ContextMenu 添加到 XAML,然后像这样设置 Items(这里只有一项,因为它无关紧要):

<MenuItem Header="{x:Static Monitor:MonitorResources.R0206_SaveLatestValueToDatabase}"
                                      IsCheckable="true"
                                      IsChecked="{Binding ElementName=root, Path=Model.SaveToDbOneChecked}"
                                      IsEnabled="{Binding ElementName=root, Path=Model.SaveToDbOneEnabled}">

SaveToDbOneChecked 和 SaveToDbOneEnabled 是我模型中的属性,它们是这样实现的:

    private bool mSaveToDbOneEnabled;

    public bool SaveToDbOneChecked
    {
        get { return mSaveToDbOneChecked; }
        set { mSaveToDbOneChecked = value; OnPropertyChanged("SaveToDbOneChecked"); }
    }

我在 ContextMenu 在 GridView 所在的 SelectionChanged 上调用 ContextMenu 之前设置了这些。但是它不会在 MenuItem 的文本旁边显示 Checked 符号,尽管 SaveToDbOneChecked 已设置为 true!我不知道我在哪里做错了,希望有人能在这里帮助我。

最佳答案

要完成这项工作,您必须做一些事情。首先,您不能使用 ElementName 属性从 MenuItem 内部进行绑定(bind),因为目标元素通常不在您的范围内。

如果我理解正确,Model 是您的 ViewModel 属性,在这种情况下,您所要做的就是将它设置为 DataContext放置 ContextMenu 的元素的名称。 这将为您的 MenuItem 设置相同的 DataContext,您可以直接绑定(bind)到 DataContext:

IsChecked="{Binding SaveToDbOneChecked, Mode=TwoWay}"

关于c# - IsChecked 绑定(bind)在 ContextMenu 的 MenuItem 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20522228/

相关文章:

java - 如何防止 GXT 中显示空上下文菜单

javascript - 如果文本是输入标签/文本框,上下文菜单 JavaScript 无法获取所选文本

c# - 这两个 Java 和 C# 语句是否相等?

c# - 试着抓。以相同的方式处理多个异常(或失败)

c# - 使用嵌套类中定义的扩展方法

c# - WPF DataGrid 无法更改所选行 : stuck on first row

每个字符的 WPF 文本 block 颜色

c# - 如何使用 CommandParameter 传递 UserControl?

c# - 取决于列表框项目类型的上下文菜单

c# - 基于策略的授权在 asp.net 核心中不起作用