2012-01-24 39 views
2

我有一个代表WPF应用程序主窗口的XAML文件。 现在我希望这个窗口显示由另一个XAML文件指定的内容。 这可行,但DataContext丢失在我的UserControl的C#代码中。框架导航 - DataContext未继承

我认为<Frame Source=....>以某种方式打破了WPF的逻辑树。 我想要具有相同的行为,就好像<Frame Source=....>Content1.xaml文件内容简单地替换,即周围的Window类的DataContext继承到UserControl

有没有简单的方法来解决这个问题? 所有solutions,我发现似乎是矫枉过正。

MainWindow.xaml

<Window ....> 
    <Frame Source="Content1.xaml" /> 
</Window> 

Content1.xaml

<UserControl ....> 
    <!-- Content goes here --> 
</UserControl> 
+1

看一看从乔·怀特这里的响应http://stackoverflow.com/ question/3621424/page-datacontext-not-inherited-from-parent-frame – Michael

+0

@Michael Joe White的解决方案适用于我。我想你可以将链接发布为这个问题的答案。 – kennyzx

回答

5

乔·怀特的解决方案here解决了这个问题。

从他的回答引用:

在XAML:

<Frame Name="frame" 
     LoadCompleted="frame_LoadCompleted" 
     DataContextChanged="frame_DataContextChanged"/> 

在代码隐藏:

private void frame_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    UpdateFrameDataContext(sender, e); 
} 
private void frame_LoadCompleted(object sender, NavigationEventArgs e) 
{ 
    UpdateFrameDataContext(sender, e); 
} 
private void UpdateFrameDataContext(object sender, NavigationEventArgs e) 
{ 
    var content = frame.Content as FrameworkElement; 
    if (content == null) 
     return; 
    content.DataContext = frame.DataContext; 
} 
+0

太棒了!谢谢 ! – Jacob

+0

您对参数有问题(反正不会使用它)。 – denver