WPF Frame 的 DataContext 不能被 Page 继承
转载至https://blog.csdn.net/sinat_31608641/article/details/88914517
已测试解决方案可行,因为WPF相关资料稀少,防止日后404,特搬运到自己博客
如果大家有研究 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_LoadCompleted(object sender , NavigationEventArgs e)
{
UpdateFrameDataContext();
}
private void Frame_DataContextChanged(object sender , DependencyPropertyChangedEventArgs e)
{
UpdateFrameDataContext();
}
/// <summary>
/// Frame 的 DataContext 不能被 Page 继承,需要做进一步的处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void UpdateFrameDataContext()
{
var content = this.frame.Content as FrameworkElement;
if (content == null)
{
return;
}
content.DataContext = this.frame .DataContext;
}
WPF Frame 的 DataContext 不能被 Page 继承的更多相关文章
- WPF学习笔记——DataContext 与 ItemSource
作为一个WPF新手,在ListBox控件里,我分不清 DataContext 与 ItemSource的区别. 在实践中,似乎: <ListBox x:Name="Lst" ...
- wpf中数据绑定(Datacontext)的应用
在winform开发中,我们常用到ado.net进行数据绑定,在编程技术日新月异的今天,这种繁杂的数据绑定方式已不能再适合开发人员,于是微软推出了wpf,更炫的界面美化,更简洁地编写控件,在wpf中使 ...
- WPF 动态资源 DataContext="{DynamicResource studentListKey}" DisplayMemberPath="Name"
public class StudentList:ObservableCollection<Student> { public List<Student> studentLis ...
- 2019-11-29-WPF-依赖属性绑定不上调试方法
原文:2019-11-29-WPF-依赖属性绑定不上调试方法 title author date CreateTime categories WPF 依赖属性绑定不上调试方法 lindexi 2019 ...
- 2019-8-2-WPF-依赖属性绑定不上调试方法
title author date CreateTime categories WPF 依赖属性绑定不上调试方法 lindexi 2019-08-02 19:56:32 +0800 2019-8-2 ...
- 2018-6-11-WPF-Frame-的-DataContext-不能被-Page-继承
title author date CreateTime categories WPF Frame 的 DataContext 不能被 Page 继承 lindexi 2018-06-11 10:48 ...
- 【转】WPF的知识
[-] 闲话WPF之二XAML概述 闲话WPF之五XAML中的类型转换 闲话WPF之十六WPF中的资源 2 闲话WPF之十九WPF中的传递事件 1 闲话WPF之二十WPF中的传递事件 2 闲话WPF之 ...
- 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)
WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...
- WPF知识点全攻略05- XAML内容控件
此处简单列举出布局控件外,其他常用的控件: Window:WPF窗口 UserControl:用户控件 Page:页 Frame:用来浏览Page页 Border:嵌套控件,提供边框和背景. Butt ...
随机推荐
- Python数模笔记-Sklearn(4)线性回归
1.什么是线性回归? 回归分析(Regression analysis)是一种统计分析方法,研究自变量和因变量之间的定量关系.回归分析不仅包括建立数学模型并估计模型参数,检验数学模型的可信度,也包括利 ...
- React中diff算法的理解
React中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DO ...
- zimbra启用SMTP认证
zmprov modifyServer {{ you domain }} zimbraMtaTlsAuthOnly FALSE zmcontrol restart 查看对应配置 zmprov getS ...
- [bug] Junit initializationError
原因 导包错误 解决 先删除 import org.junit.Test; 再导入正确的包 参考 https://blog.csdn.net/javae100/article/details/7978 ...
- ip_conntrack or nf_conntrack : table full, dropping packet
nf_conntrack: table full, dropping packet ip_conntrack or nf_conntrack : table full, dropping packet ...
- 联想INTEL X86台式机 用光驱启动 usb光驱启动
联想INTEL X86台式机 用光驱启动 usb光驱启动 启动项顺序 都要调整 主要顺序 自动顺序 出错顺序 按下f10 f12
- 强哥ThinkPHP学习笔记
TP框架:1.模板引擎2.MVC设计模式3.常用操作类 模板引擎和框架区别1.模板引擎只是框架中用来做php和html分离 MVC设计模式M model 数据模型V view 视图C control ...
- 强哥PHP学习笔记
1.php的代码,必须放在.php的文件中,php代码必须写在<?php ?>之间. 2.//单行注释 /* 多行注释 */ 3.默认首页index.php index.html inde ...
- 搭建LNMP环境部署Wordpress博客
!!!首先要做的就是关闭系统的防火墙以及selinux: #systemctl stop firewalld #systemctl disable firewalld #sed -ri 's/^(SE ...
- Linux_ACL文件访问控制列表
一.ACL文件访问控制列表 前言 1️⃣:ACL-文件访问控制列表: 2️⃣:ACL可以针对单个用户,单个文件或目录来进行r.w.x的权限设定,特别适用于需要特殊权限的使用情况. 3️⃣:ACL就是可 ...