Wie auf der rechten Maustaste angeklickte Objekt im WPF-Kontext-Menü-item-click-event-handler?

In WPF-Anwendungen gibt es eine Grid mit einer Reihe von Objekten (Sie sind abgeleitet von einem custom control). Ich möchte einige Aktionen auf jeden von Ihnen über Kontext-Menü:

   <Grid.ContextMenu>
     <ContextMenu>
       <MenuItem  Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
     </ContextMenu>                   
   </Grid.ContextMenu> 

Aber der event-handler-ich kann nicht wissen, welches der Objekte wurde mit der rechten Maustaste geklickt:

    private void EditStatusCm_Click(object sender, RoutedEventArgs e)
    {
        MyCustControl SCurrent = new MyCustControl();
        MenuItem menu = sender as MenuItem;
        SCurrent = menu.DataContext as MyCustControl; //here I get a run-time error
        SCurrent.Status = MyCustControl.Status.Sixth;
    }

Auf, die auskommentierte Zeile Debugger sagt: der Objektverweis wurde nicht auf eine Instanz eines Objekts.

Bitte helfen, was ist falsch in meinem code?

Bearbeitet (Hinzugefügt):

Habe ich versucht, das gleiche zu tun, mit Befehl Ansatz:

Als ich erklärte, dass ein DataCommands Klasse mit RoutedUICommand Requery und dann Window.CommandBindings

<Window.CommandBindings>
  <CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>

XAML von MenuItem jetzt aussieht:

<Grid.ContextMenu>
 <ContextMenu>
  <MenuItem  Name="EditStatusCm" Header="Change status"  Command="MyNamespace:DataCommands.Requery"/>
 </ContextMenu>                   
</Grid.ContextMenu>

Und event-handler sieht so aus:

    private void RequeryCommand_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        IInputElement parent = (IInputElement)LogicalTreeHelper.GetParent((DependencyObject)sender);
        MyCustControl SCurrent = new MyCustControl();
        SCurrent = (MuCustControl)parent;
        string str = SCurrent.Name.ToString();//here I get the same error
        MessageBox.Show(str);
    }

Aber debugger zeigt die gleiche run-time error: der Objektverweis wurde nicht auf eine Instanz eines Objekts.

Was fehlt in meinen beiden Ansätze?

Wie soll ich Verweis mit der rechten Maustaste geklickt Objekt in WPF-Kontext-Menü-item-click-event-handler?

  • Ich habe versucht mit Befehl-Ansatz als WPF-ish, aber habe den gleichen Fehler. Ich bearbeitet meine Frage und fügte Schritte von meinem Befehl-Ansatz versuchen. Mein Verständnis von, wie man das angeklickte Objekt-Referenz ist etwas fehlt in beiden Fällen
InformationsquelleAutor rem | 2010-01-09
Schreibe einen Kommentar