Comment référencer faites un clic droit sur l'objet dans WPF l'élément de Menu Contextuel cliquez sur gestionnaire d'événement?

En application WPF il y a un Grid avec un certain nombre d'objets (ils sont dérivés à partir d'un contrôle personnalisé). Je veux effectuer certaines actions sur chacun d'entre eux à l'aide du menu contextuel:

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

Mais dans le gestionnaire d'événement je n'arrive pas à savoir lequel de ces objets a été cliqué avec le bouton droit:

    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;
    }

Sur cette ligne de commentaire Débogueur dit: Objet de référence non définie à une instance d'un objet.

Aider s'il vous plaît, quel est le problème dans mon code?

Modifié (ajout):

J'ai essayé de faire de même, à l'aide de Commande approche:

J'ai déclaré un DataCommands Classe avec RoutedUICommand Requery et ensuite utilisé Window.CommandBindings

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

XAML de MenuItem ressemble maintenant à:

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

Et gestionnaire d'événement ressemble:

    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);
    }

Mais débogueur affiche la même erreur d'exécution: Objet de référence non définie à une instance d'un objet.

Ce qui est manquant dans mon les deux approches?

Comment je doit faire référence à droite-objet cliqué dans WPF l'élément de Menu Contextuel cliquez sur gestionnaire d'événement?

  • J'ai essayé d'utiliser la Commande approche plus WPF-ish, mais j'ai reçu le même message d'erreur. J'ai édité ma question et a ajouté étapes de ma Commande tentative d'approche. Ma compréhension de la façon d'obtenir l'objet cliqué référence manque quelque chose dans les deux cas
InformationsquelleAutor rem | 2010-01-09