2013-12-11 5 views
5

У меня есть приложение MVVM и вы хотите добавить ContextMenu.IsChecked Binding не работает в MenuItem в ContextMenu

я добавил ContextMenu в XAML, а затем установите элементы, как это (только один пункт здесь, потому что это не имеет значения):

<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 вызывается на SelectionChanged в GridView Контекстное находится в Но он не будет отображаться проверяемого знак рядом с текстом MenuItem хотя SaveToDbOneChecked был установлен. к истине! Я не знаю, где я делаю что-то неправильно и надеюсь, что кто-то может мне помочь.

+1

Запуск приложения в отладки и проверки для Binding ошибок в окне вывода. –

+0

Да, их довольно много: Не могу найти источник для привязки со ссылкой «ElementName = root». BindingExpression: Path = Model.SaveToDbOneChecked; DataItem = NULL; целевым элементом является «MenuItem» (Name = ''); target is is IsEnabled (тип «Boolean») В чем моя проблема со связыванием? o_O – Kazoooka

ответ

5

Несколько вещей, которые вам нужно сделать, чтобы сделать эту работу. Прежде всего, вы не можете связывать изнутри MenuItem с использованием свойства ElementName, поскольку целевой элемент чаще всего выходит из вашей области действия.

Если я правильно понимаю, что Model вашей ViewModel свойства, в этом случае все, что вам нужно сделать, это установить его в качестве DataContext элемента, на котором ContextMenu находится. Это установит тот же DataContext для вашего MenuItem и вы можете связываться непосредственно с DataContext:

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

Удивительный! Это полностью работает! Большое спасибо!! – Kazoooka

Смежные вопросы