我在这里遇到了TreeView-Binding和ContextMenu的问题:Selected TreeViewItem is null
现在我遇到了这个问题:我有ContextMenu
<TreeView.ContextMenu>
<ContextMenu x:Name="MyContext" ItemsSource="{Binding OCContext}" DisplayMemberPath="Text"/>
</TreeView.ContextMenu>
(图片显示了我的ContextMenu的样子,不介意tabItem ......)。
正如你所看到的,它只是ContetMenu,没有MenuItem!如果用户点击Close,我想在我的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(“items”Close和CloseOtherThankThis)绑定到我的ViewModel,所以当用户点击其中一个时,我想在我的ViewModel中访问它们。这意味着我不想一个接一个地绑定它们,我想以某种方式获取一个事件(ContextMenuItemClicked(?))被调用并在我的ViewModel中使用它。
顺便说一下。在ContextMenu下使用MenuItem将创建另一个“菜单文件夹”,因此它将是
“” - &gt;关闭
“” - &gt; CloseOtherThankThis
我不希望它看起来像这样。
编辑:我目前正在收到这样的项目:
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;
}
是否有可能通过绑定获取所选项目?
答案 0 :(得分:0)
不知道你是否尝试过它,但是有一个PlacementTarget用于上下文菜单,它为你提供了包含上下文菜单的对象。
在我的一个项目中,我做了类似的事情:
<MenuItem ... Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ContextMenu}},Path=PlacementTarget.SelectedItem