c# - page.DataContext 不是从父 Frame 继承的?

标签 c# wpf binding datacontext msdn

我在框架 frame 中有一个页面 pageframe.DataContext = "foo"

  • (page.Parent as Frame).DataContext"foo"好的
  • page.DataContext 的 BindingExpression 为 null(也强制使用 ClearValue)。 好的
  • page.DataContextnull但我期待“foo”!

为什么不继承DataContext?据我understand Frame 沙盒 内容。但是我找不到任何关于此行为的文档 - 谁能指出我提到的地方?

最佳答案

您没有特别询问如何您可以使它工作,只是为什么默认情况下它不工作。但是,如果您确实希望您的页面继承框架的 DataContext,您可以这样做:

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

关于c# - page.DataContext 不是从父 Frame 继承的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621424/

相关文章:

c# - 工具提示内容稍微不够宽

c# - 列表框 Selected.value 抛出 null 异常

objective-c - 使用绑定(bind)来实现 NSTableView 拖放重新排列?

c# - 删除 DevExpress WPF 主题

c# - 模型更改后如何更新 View ?

windows-phone-7 - 全景标题绑定(bind)

wpf - MVVM ListBox 控制内容控件

c# - 使用 LINQ,我可以像在 C# 中那样在 VB.NET 中为 "grouping"命名吗?

c# - 如何手动将带有列表的 View 模型映射到 dto

c# - 如何为控制台和 WPF .NET 应用程序的 PythonNET 设置 Runtime.PythonDLL(PIP 安装)