2013-12-11 27 views
5

Mam aplikację MVVM i chcę dodać ContextMenu.IsChecked Wiązanie nie działa w MenuItem w ContextMenu

dodałem ContextMenu do XAML i następnie ustawić elementy tak (tylko jedna pozycja, bo to nie ma znaczenia):

<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 i SaveToDbOneEnabled są właściwości w moim modelu, które są realizowane w jak to:

private bool mSaveToDbOneEnabled; 

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

ustawić je przed ContextMenu jest wywoływana na SelectionChanged w GridView ContextMenu jest w Ale to nie pokaże sprawdzone znak obok tekstu MenuItem chociaż SaveToDbOneChecked został ustawiony. prawda! Nie wiem, gdzie coś robię źle i mam nadzieję, że ktoś mi pomoże.

+1

uruchomić aplikację w debugowania i sprawdzić pod kątem wiązania Błędy w oknie wyjściowym. –

+0

Tak, istnieje kilka: Nie można znaleźć źródła dla wiązania z odniesieniem 'ElementName = root'. BindingExpression: Path = Model.SaveToDbOneChecked; DataItem = null; elementem docelowym jest 'MenuItem' (Name = ''); Właściwość target jest "IsEnabled" (typ "Boolean") jaki jest mój problem z powiązaniem? o_O – Kazoooka

Odpowiedz

5

Kilka rzeczy, które musisz zrobić, aby to zadziałało. Przede wszystkim nie można powiązać z wewnątrz obiektu MenuItem przy użyciu właściwości ElementName, ponieważ element docelowy najczęściej znajduje się poza zasięgiem.

Jeśli rozumiem poprawnie Model jest nieruchomość ViewModel, w tym przypadku wszystko co musisz zrobić, to ustawić go jako DataContext elementu, na którym umieszczona jest ContextMenu. To będzie ustawić ten sam DataContext dla MenuItem i można wiązać bezpośrednio do DataContext:

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

Awesome! To całkowicie działa! Dziękuję Panu bardzo!! – Kazoooka

Powiązane problemy