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

  • 相关阅读:
    python 集合
    jQuery选择器
    hdu 5747 Aaronson
    hdu 2049 不容易系列之(4)——考新郎
    hdu 2048 神、上帝以及老天爷
    hdu 2045 不容易系列之(3)—— LELE的RPG难题
    hdu 2047 阿牛的EOF牛肉串
    hdu 2046 骨牌铺方格
    hdu 2050 折线分割平面
    hdu 2044 一只小蜜蜂
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086170.html
Copyright © 2011-2022 走看看