Prism Sample 16-RegionContext
终于发现一个有趣的新知识了。
本例的核心是RegionContext,意思是一个区域的上下文。但与DataContext似乎并不相同。
先看一下整体思路。
在主窗体上只有一个Region:
<Grid>
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
</Grid>
然后在此区域上注册一个视图,但视图中多了一个子区域
<Grid x:Name="LayoutRoot" Background="White" Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions> <ListBox x:Name="_listOfPeople" ItemsSource="{Binding People}" DisplayMemberPath="FirstName"/>
<ContentControl Grid.Row="1" Margin="10"
prism:RegionManager.RegionName="PersonDetailsRegion"
prism:RegionManager.RegionContext="{Binding SelectedItem, ElementName=_listOfPeople}"/>
</Grid>
这个结构很清楚,上部是一个列表,下面插入一个区域,用来显示选中项的细节。为了体现更多信息,我把lisbox的显示信息改了下,只显示FirstName。
但是定义了一个RegionContext,绑定到SelectedItem。如果这是上下文,这个子视图还有自己的ViewModel怎么办呢?
public class PersonDetailViewModel : BindableBase
{
private Person _selectedPerson;
public Person SelectedPerson
{
get { return _selectedPerson; }
set { SetProperty(ref _selectedPerson, value); }
} public PersonDetailViewModel()
{ }
}
系统决定了View 和ViewModel的自动绑定了,Detail绑定的是SelectedPerson,需要实现一个转换。
这个转换在View的后台代码是实现了:
public partial class PersonDetail : UserControl
{
public PersonDetail()
{
InitializeComponent();
RegionContext.GetObservableContext(this).PropertyChanged += PersonDetail_PropertyChanged;
} private void PersonDetail_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
var context = (ObservableObject<object>)sender;
var selectedPerson = (Person)context.Value;
((PersonDetailViewModel) DataContext).SelectedPerson = selectedPerson;
}
这段代码的意思是,Detail 绑定了SelectedItem,如果SelectedItem发生了变化,就变化了的值更新ViewModel
Prism Sample 16-RegionContext的更多相关文章
- Android 主题动态切换框架:Prism
Prism(棱镜) 是一个全新的 Android 动态主题切换框架,虽然是头一次发布,但它所具备的基础功能已经足够强大了!本文介绍了 Prism 的各种用法,希望对你会有所帮助,你也可以对它进行扩展, ...
- [转]Blue Prism Architecture
本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...
- #pragma pack(push,1)与#pragma pack(1)的区别
这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n) 作用:C编译器将按照n个字节对 ...
- PCM音频设备的操作(转)
对音频设备的操作主要是初始化音频设备以及往音频设备发送 PCM(Pulse Code Modulation)数据.为了方便,本文使用 ALSA(Advanced Linux Sound Archite ...
- 开源Math.NET基础数学类库使用(11)C#计算相关系数
阅读目录 前言 1.Math.NET计算相关系数的类 2.Correlation的实现 3.使用案例 4.资源 本博客所有文章分类的总目录:[总目录]本博客博文总目录-实 ...
- (转载)关于#pragma pack(push,1)和#pragma pack(1)
转载http://www.rosoo.net/a/201203/15889.html 一.#pragma pack(push,1)与#pragma pack(1)的区别 这是给编译器用的参数设置,有关 ...
- #pragma pack(push,1)与#pragma pack(pop)
这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n) 作用:C编译器将按照n个字节对 ...
- 【面试笔试算法】牛客网一站通Offer编程题2016.4.19
牛客网一站通offer (一)字符串变形 1. 题目: 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello Wor ...
- PC平台在Unity3D中播放硬盘ogg,mp3,wav文件
Unity3D PC平台本身是支持直接用www读取本地ogg,wav的,但是并不能读取byte[],字节数组格式,这对用习惯了bass,fmod的人来说有点不方便. 搜了一圈发现了一个C#的音频库叫N ...
- “一战通offer”互联网实习季编程挑战
1.字符串变形 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把 ...
随机推荐
- ERROR 1067 (42000): Invalid default value for 'xxx字段'
报错版本:mysql-5.7.35 1.报错完整提示信息: ERROR 1067 (42000): Invalid default value for 'LOCK_TIME_' 2.原因: 使用sou ...
- Error parsing HTTP request header 控制台报错分析与解决
控制台报错信息: org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request hea ...
- HTTP 协议相关
一. HTTP常见请求头 1. Host (主机和端口号) 2. Connection (连接类型) 3.Upgrade-Insecure-Requests (升级为HTTPS请求) 4. User- ...
- scrcpy投屏软件
Android很好用得scrcpy 投屏软件: 下载传送门:https://github.com/Genymobile/scrcpy/releases 1.下载解压包后,解压至自己得电脑目录,并复制目 ...
- shell多进程并发数控制
在批量执行任务时,单进程执行速度太慢,使用&不加数量控制,又担心资源占用过多,导致宕机等问题,因此我们需要控制并发进程的数量,保证效率的同时,保证资源占用不会太高. 其中一个解决思路是利用简单 ...
- spring-boot-starter-webflux
webflux: 反应式编程reactor的产物,采用发布订阅模式,引入netty的nio,比较适合IO密集型应用. 因普遍应用使用的DB链接是IO阻塞型,因此在一般应用中无法体现它的优势.redis ...
- SpringBoot3.0 + SpringSecurity6.0+JWT
JWT_SpringSecurity SpringBoot3.0 + SpringSecurity6.0+JWT Spring Security 是 Spring 家族中的一个安全管理框架. 一般We ...
- DVWA-XSS (Stored) 存储型XSS
存储型XSS,顾名思义,就是会传入数据库,长久的使用,常见为留言板,用户信息资料. LOW 审计源码 <?php // 是否提交 btnSign if( isset( $_POST[ 'btnS ...
- Bootstarp5笔记
我这次来更新Bootstarp5的相关知识啦! 一.安装教程 1.在官网下载相应版本 官网地址:getbootstrap.com 我下载的是Bootstarp5版本 2.点击下载之后,会得到一个压缩文 ...
- 修改host文件
host文件路径 Windows 系统:C:\Windows\System32\drivers\etc\hosts Linux 系统:/etc/hosts Mac(苹果电脑)系统:/etc/hosts ...