WPF中的DataBinding用于父对象

我有一个TreeView我正在填充并为每个项目添加一个ContextMenu。 问题出在我的ViewModel中,TreeView ItemSource绑定到ViewModel本身的属性。 当我再次尝试在ViewModel上引用某些属性时,我似乎无法让它工作。

                     

StackOverflow上的一篇post向我指出了使用RelativeSource正确绑定到MainWindow上的ViewModel的方向。 但是,当我运行该应用程序时,该命令不起作用,并且“输出”窗口不会生成我可以看到的任何绑定或xaml错误。

基本上,可见性绑定起作用,因为“模型”项上存在这些属性。 但是我希望将所有内容都移动到ViewModel,尤其是Command。

谁能发现我在这里做错了什么?

这里要记住的关键是上下文菜单不是可视化树的一部分

因此,它们不会inheritance与它们所属的控件相同的源以进行绑定。 处理此问题的方法是绑定到ContextMenu本身的placement target 。 但是因为你想在ViewModel类中将它绑定到Command,所以将DataContext in Tag TextBlock的DataContext in Tag中并在你的命令中使用Binding,如下所示 –

          

用于类似上面的其他绑定,它将按你想要的方式工作。

因为您没有发布完整的.xaml,所以我们使用树视图的datacontext。 因为RelativeSource允许我们访问TreeView,所以您需要在绑定路径中使用DataContext,因为这是对ViewModel的引用。

 Command="{Binding Path="DataContext.AddServerCommand" RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeView}}}" 

代替

  

尝试

  

你的ViewModel不是你的DataContext吗?