В приложении WPF есть Grid
с несколькими объектами (они получены из пользовательского элемента управления). Я хочу выполнить некоторые действия с каждым из них, используя контекстное меню:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
</ContextMenu>
</Grid.ContextMenu>
Но в обработчике событий я не могу узнать, по какому объекту щелкнули правой кнопкой мыши:
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;
}
В этой закомментированной строке отладчик говорит: Ссылка на объект не установлена на экземпляр объекта.
Пожалуйста, помогите, что не так в моем коде?
Отредактировано (добавлено):
Я пытался сделать то же самое, используя Command подхода:
Я объявил DataCommands
класс с RoutedUICommand Requery
, а затем использовал Window.CommandBindings
<Window.CommandBindings>
<CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>
XAML из MenuItem теперь выглядит так:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Command="MyNamespace:DataCommands.Requery"/>
</ContextMenu>
</Grid.ContextMenu>
А обработчик событий выглядит так:
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);
}
Но отладчик показывает ту же ошибку во время выполнения: Ссылка на объект не установлена на экземпляр объекта.
Чего не хватает в обоих моих подходах?
Как мне ссылаться на объект, щелкаемый правой кнопкой мыши в обработчике события щелчка пункта контекстного меню WPF?