2018-6-11-WPF-Frame-的-DataContext-不能被-Page-继承
2024-08-31 19:51:00
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
最新文章
- UNIX中的文件类型
- ORACLE10G工作原理
- 软件工程 speedsnail 冲刺4
- HDU1243:反恐训练营
- iOS+JSPatch在线修改app功能-b
- 100. Same Tree(C++)
- rdlc报表
- Python实现ID3算法
- JGroups 入门实践(转)
- libevent和libev的区别对比(二)
- java中堆和堆栈的区别
- 响应式网站-全屏banner响应的2中方法 - 被吃掉的banner
- OI回忆录——一个过气OIer的智障历程
- hdevelop (halcon)处理大分辨率图像问题
- python3排序 sorted(key=lambda)
- asp.net core 系列 14 错误处理
- MySQL学习笔记(六)MySQL8.0 配置笔记
- Really Big Numbers CodeForces - 817C (数学规律+二分)
- flutter image_picker使用照相机
- Oracle Comment 获取并修改表或字段注释
热门文章
- Ajax.dll使用方法和步骤(比较方便的实现ajax)
- 杨柳絮-Info:菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾”
- 学习JDK1.8集合源码之--Stack
- [运维]Dell R710 raid配置 标签: raid运维 2017-04-15 19:35 581人阅读 评论(16)
- MaxCompute 助力衣二三构建智能化运营工具
- Function相关的小知识
- 用SpannableString来设置一个textview的各种样式
- golang进制
- Nginx教程(二) Nginx虚拟主机配置 (转)
- jdbc框架-dbutils的简单使用