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