刚刚发生了一个奇怪的事件,说明我不理解WPF中的相对绑定以及我以为我做过。
主应用程序包含一个Window,下面是一个ContentControl,它包含当前的ViewModel(我们使用的是MVVM)。
在许多视图中,有一些像这样的代码绑定回主视图上的函数,即绑定到窗口本身的函数:
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},
Path=DataContext.CommandOnMainViewModel}"
这种方法很好,一切都是正确的,对世界也很好。
但是我最近更改了主窗口,以便将ViewModel加载到Frame而不是ContentControl中,以便查看我们是否可以从Frame中包含的导航控件中获取任何值。
该应用程序最初似乎工作正常,但很快就发现所有相关绑定都像上面那样破坏了 - 应用程序根本就没有在DataContext上找到这些命令了。
我认为RelativeSource FindAncestor刚刚回到树上,直到碰到指定类型的对象并绑定到该对象。在这种情况下,将ContentControl替换为Frame应该没有区别。
但确实如此。为什么,我该怎么做才能解决它?
编辑:翻阅一些参考书,我发现这句话:“Frame控件保存任意内容,就像所有其他内容控件一样,但它将内容与UI的其余部分隔离开来。”这就解释了为什么它不起作用。如果有一个简单的解决方法,它仍然值得赞赏。