绑定WPF ContextMenu的标头

时间:2013-07-11 10:21:38

标签: c# wpf binding treeview contextmenu

我在这里遇到了TreeView-Binding和ContextMenu的问题:Selected TreeViewItem is null

现在我遇到了这个问题:我有ContextMenu

<TreeView.ContextMenu>
    <ContextMenu x:Name="MyContext" ItemsSource="{Binding OCContext}" DisplayMemberPath="Text"/>
</TreeView.ContextMenu>

http://i.stack.imgur.com/4gA1l.png

(图片显示了我的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;
    }

是否有可能通过绑定获取所选项目?

1 个答案:

答案 0 :(得分:0)

不知道你是否尝试过它,但是有一个PlacementTarget用于上下文菜单,它为你提供了包含上下文菜单的对象。

在我的一个项目中,我做了类似的事情:

 <MenuItem ...    Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ContextMenu}},Path=PlacementTarget.SelectedItem