• 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打印4个九九乘法表
    mysql语法归纳总结
    帆软BI报表的创建
    jmeter+influxdb+grafana可视化监控接口测试
    jmeter 自动化
    linux安装docker+jmeter分布式
    jmeter连接mysql数据库
    cmd切换盘符
    jmeter接口测试教程
    python3 进程中 获取进程号和杀死进程
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086170.html
Copyright © 2020-2023  润新知