zoukankan      html  css  js  c++  java
  • 2018-6-11-WPF-Frame-的-DataContext-不能被-Page-继承

    title author date CreateTime categories
    WPF Frame 的 DataContext 不能被 Page 继承
    lindexi
    2018-06-11 10:48:24 +0800
    2018-05-28 14:23:14 +0800
    WPF

    本文告诉大家在 Frame 的 DataContext 不能被 Page 继承如何解决。

    如果大家有研究 Frame 会发现一个诡异的现象。

    假设 page 是在 Frame 里面的 Page ,通过下面的代码是可以拿到 DataContext ,而且假设 Frame 的 DataContext 就是一个定义的类 Foo

    var frame = page.Parent as Frame;
    // frame.DataContext == foo

    但是如何直接拿 page 的 DataContext ,返回空。

    原因是 Frame 是做了 Frame 里面的元素的 UI 隔离,也就是 DataContext 不能继承。

    解决的方法是在 Frame 的 LoadCompleted 添加让里面元素知道 DataContext ,需要后台代码

    <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 not inherited from parent Frame? - Stack Overflow

  • 相关阅读:
    7zip 自解压安装程序
    修改当前启动菜单项的HyperVisorLaunchType
    VMware 虚拟镜像转 Hyper-V(Win10/2016)
    旋转基础知识
    变换及移动基础知识
    文字及排版章末小结
    文字排版相关
    文字变形及封套扭曲
    LinQ学习笔记.
    PHP笔记-PHP中Web Service.
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086170.html
Copyright © 2011-2022 走看看