ContentControl的交换框架破坏了WPF中的相对绑定

时间:2014-03-28 11:21:53

标签: c# wpf mvvm

刚刚发生了一个奇怪的事件,说明我不理解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的其余部分隔离开来。”这就解释了为什么它不起作用。如果有一个简单的解决方法,它仍然值得赞赏。

0 个答案:

没有答案