У меня была проблема с TreeView-Binding и ContextMenu здесь: Selected TreeViewItem is nullBind Заголовок WPF ContextMenu
Теперь я с этой проблемой: у меня есть ContextMenu
<TreeView.ContextMenu>
<ContextMenu x:Name="MyContext" ItemsSource="{Binding OCContext}" DisplayMemberPath="Text"/>
</TreeView.ContextMenu>
(Изображение показывает, как выглядит мой ContextMenu, не обращайте внимания на tabItem ...).
Как вы можете видеть, это просто ContetMenu, нет MenuItem! Если пользователь нажимает кнопку «Закрыть», я хочу что-то сделать в моей модели ViewModel (поднять команду?). Я также хотел бы узнать, какую кнопку/меню он щелкнул. Количество меню динамически, так как он привязан к ItemsSource.
Это мой ViewModel:
private ObservableCollection<T_Antwort> _occontext;
public ObservableCollection<T_Antwort> OCContext
{
get
{
if (_occontext == null)
_occontext = new ObservableCollection<T_Antwort>();
return _occontext;
}
set
{
_occontext = value;
RaisePropertyChanged(() => OCContext);
}
}
Так все, что я хочу сделать, это связать ContextMenu (The «пунктов» Закрыть и CloseOtherThankThis) на мой ViewModel, поэтому, когда пользователь нажимает на одну из них, Я хочу получить к ним доступ в моей модели ViewModel. Это означает, что я не хочу связывать их один за другим, я хочу каким-то образом получить событие (ContextMenuItemClicked (?)), Которое вызывается, и использовать его в моей ViewModel.
КПП. с помощью MenuItem под ContextMenu создаст еще одну "папку Menu", поэтому было бы
"" -> Закрыть
"" -> CloseOtherThankThis
И я не хочу, чтобы это выглядело, как это.
Edit: Я в настоящее время получаю деталь, как это:
private void MyContext_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
System.Windows.Controls.Primitives.MenuBase s = sender as System.Windows.Controls.Primitives.MenuBase;
ItemCollection ic = s.Items;
T_Antwort SelectedItem = (T_Antwort)ic.CurrentItem;
}
Есть ли возможность получить выбранный элемент с обязательным?
Спасибо, но я не знаю, где я должен его использовать. Я пробовал это с помощью MenuItem и CommandBinding с указанным выше как CommandParameter, но команда не выполняется? .. 'Command =" {Binding asd} "CommandParameter =" {Binding RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = {x: Тип ContextMenu}}, Path = PlacementTarget.SelectedItem} ", VM' asd = new RelayCommand
Я не знаю о mvvm ... извините ... Я говорил в традиционном wpf. Если вам нужен пример, я могу дать вам полный пример в традиционном wpf. – sexta13
Нет, это нормально, но спасибо. – Rudi