2013-12-11 9 views
5

Ich habe eine MVVM-Anwendung und möchte ein ContextMenu hinzufügen.IsChecked Binding funktioniert nicht in MenuItem in einem ContextMenu

ich hinzugefügt, um die ContextMenu XAML und dann die Einzelteile so (nur ein Element hier, weil es spielt keine Rolle):

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

Die SaveToDbOneChecked und SaveToDbOneEnabled Eigenschaften in meinem Modell sind die wie umgesetzt werden dies:

private bool mSaveToDbOneEnabled; 

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

ich habe diese vor dem ContextMenu wird auf dem Selection im Gridview genannt ContextMenu ist in Aber es wird das Karo-Zeichen neben dem Text des MenuItem nicht zeigen, obwohl die SaveToDbOneChecked eingestellt wurde. um wahr zu sein! Ich weiß nicht, wo ich etwas falsch mache und hoffe, dass mir hier jemand helfen kann.

+1

Führen Sie die Anwendung im Debug und prüfen, ob Binding Fehler in Ausgabefenster. –

+0

Ja, es gibt eine ganze Reihe: Die Quelle für die Bindung kann nicht mit der Referenz 'ElementName = root' gefunden werden. BindingExpression: Pfad = Model.SaveToDbOneChecked; Datenelement = null; Zielelement ist 'MenuItem' (Name = ''); Zieleigenschaft ist 'IsEnabled' (Typ 'Boolean') Was ist mein Problem mit der Bindung? o_O – Kazoooka

Antwort

5

Ein paar Dinge, die Sie tun müssen, damit dies funktioniert. Zuallererst können Sie nicht innerhalb einer MenuItem Eigenschaft ElementName binden, da das Zielelement meistens außerhalb Ihres Bereichs liegt.

Wenn ich das richtig verstanden, die Model ist Ihre ViewModel Eigenschaft, in diesem Fall alles, was Sie tun müssen, ist es als DataContext des Elements einzustellen, auf das die ContextMenu platziert wird. Dies wird die gleiche DataContext für Ihre MenuItem eingestellt und Sie können direkt an DataContext binden:

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

Super! Das funktioniert völlig! Vielen Dank, mein Herr!! – Kazoooka