IsChecked Binding在ContextMenu的MenuItem中不起作用

时间:2013-12-11 14:50:13

标签: c# wpf contextmenu

我有一个MVVM应用程序,想要添加一个ContextMenu。

我将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!我不知道我做错了什么,希望有人能在这里帮助我。

1 个答案:

答案 0 :(得分:5)

要完成这项工作,您需要做的一些事情。首先,您无法使用MenuItem属性从ElementName内部进行绑定,因为目标元素通常超出了您的范围。

如果我理解正确Model是您的ViewModel属性,在这种情况下,您所要做的就是将其设置为{{1}的元素DataContext放置。 这会为ContextMenu设置相同的DataContext,您可以直接绑定到MenuItem

DataContext