帧导航 - DataContext未继承

时间:2012-01-24 17:39:32

标签: wpf navigation frame datacontext

我有一个代表WPF应用程序主窗口的XAML文件。 现在我希望此窗口显示由另一个XAML文件指定的内容。 这有效,但DataContext的C#代码中丢失了UserControl

我认为<Frame Source=....>以某种方式破坏了WPF的逻辑树。 我想要有同样的行为,好像<Frame Source=....>只是被 Content1.xaml 文件内容替换,即周围DataContext的{​​{1}} class继承到Window

有没有一种简单的方法可以解决这个问题? 我发现的所有solutions看起来都有点矫枉过正。

伪代码

MainWindow.xaml

UserControl

Content1.xaml

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

1 个答案:

答案 0 :(得分:7)

Joe White的解决方案here解决了这个问题。

引用他的回答:

在XAML中:

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

在codebehind中:

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;
}