【问题标题】:Data Binding from context menu inside a treeviewitem template从树视图项模板内的上下文菜单中的数据绑定
【发布时间】:2014-03-16 14:05:15
【问题描述】:

我有两个级别的树视图,在第二个级别中,我有一个带有上下文菜单的模板,我试图将 ContextMenu 所属的 TreeViewItem 作为命令参数传递,但到目前为止还没有成功,在我的应用程序 TreeviewItem 有一个 HierarchicalDataTemplate 但这是我的 XAML 的简化示例:

<Grid
    Background="Transparent">
    <TreeView>
        <TreeViewItem Header="blabla1"/>
        <TreeViewItem Header="blabla2">
            <TreeViewItem Header="innerblalbla">
                <TreeViewItem.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Test" 
                                  Command="{Binding PlacementTarget.DataContext.testCommand,
                       RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ContextMenuu}}}"
                                   CommandParameter=??????/>
                    </ContextMenu>
                </TreeViewItem.ContextMenu>
            </TreeViewItem>
        </TreeViewItem>
    </TreeView>
</Grid>

和我的 viewModel(DataContext 在后面的代码中设置):

class myViewModel : INotifyPropertyChanged
{

    public myViewModel()
    {
        testCommand = new DelegateCommand(test);
    }

    public DelegateCommand testCommand { get; set; }

    private void test()
    {
        var x = 1;
    }
}

【问题讨论】:

    标签: c# wpf binding command contextmenu


    【解决方案1】:

    MenuItemTreeViewItem 不在同一 Visual Tree 中,这就是 FindAncestor 无法到达 Window 的原因。

    您可以使用ContextMenuPlacementTarget 来获取TreeViewItem,它会自动继承窗口的DataContext。

    这就是你的做法:

    <MenuItem Header="Test" 
              Command="{Binding PlacementTarget.DataContext.testCommand,
                                RelativeSource={RelativeSource Mode=FindAncestor, 
                                               AncestorType={x:Type ContextMenu}}}"/>
    

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 2013-05-04
      • 2012-11-05
      • 1970-01-01
      • 2013-09-23
      • 2012-11-06
      相关资源
      最近更新 更多