2013-12-11 15 views
5

Ho un'applicazione MVVM e voglio aggiungere un ContextMenu.IsChecked Binding non funziona in MenuItem in un ContextMenu

ho aggiunto il ContextMenu per XAML e quindi impostare le voci come questo (un solo articolo qui perché non ha importanza):

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

Il SaveToDbOneChecked e SaveToDbOneEnabled sono proprietà nel mio modello che sono attuate come questo:

private bool mSaveToDbOneEnabled; 

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

ho impostato questi prima della ContextMenu viene chiamato sul SelectionChanged nella GridView il ContextMenu è in Ma non mostrerà il segno Controllato accanto al testo del MenuItem anche se il SaveToDbOneChecked è stata impostata. al vero! Non so dove faccio qualcosa di sbagliato e spero che qualcuno possa aiutarmi qui.

+1

eseguire l'applicazione in debug e verificare la presenza di errori di associazione a finestra di output. –

+0

Sì, ce ne sono parecchi: Impossibile trovare l'origine per l'associazione con il riferimento 'ElementName = root'. BindingExpression: Path = Model.SaveToDbOneChecked; DataItem = null; l'elemento target è 'MenuItem' (Name = ''); la proprietà target è "IsEnabled" (tipo "Boolean") qual è il mio problema con il binding? o_O – Kazoooka

risposta

5

Alcune cose che devi fare per farlo funzionare. Innanzitutto non è possibile eseguire il bind all'interno di un MenuItem utilizzando la proprietà ElementName poiché l'elemento di destinazione è il più delle volte fuori dall'ambito.

Se ho capito bene il Model è la vostra proprietà ViewModel, in questo caso, tutto quello che dovete fare è impostarlo come DataContext del l'elemento sul quale è posto il ContextMenu. Questo imposterà la stessa DataContext per il vostro MenuItem ed è possibile associare direttamente al DataContext:

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

Fantastico! Funziona perfettamente! Grazie mille signore!! – Kazoooka

Problemi correlati