为Page添加INotifyPropertyChanged功能
在Page页面里面, DataContext 更新后,前台数据要求会自动更新.
但前台的绑定如果用x:bind 语法. 它要求强类型.直接关联到DataContext上就不行了.
需要为Page 添加 INotifyPropertyChanged 接口实现.
页面如果很多的话. 为每个页面实现此接口,代码将有不少重复.
为了减少代码重复量而努力.
现在要在页面代码里面添加vm属性.这是强类型.所以可以让前台使用x:bind.
public Vm<设置PageViewModel> VM { get; } = new Vm<设置PageViewModel>();
vm泛型类定义如下: 这样当Data更新后,就会自动通知前台.
public class Vm<T> : ViewModelBase
{
private T _data; public T Data
{
get { return _data; }
set { SetProperty(ref _data, value); }
}
}
还要订阅事件更新,放在构造函数里面.这样当DataContext更新后.同时赋值给Data.
DataContextChanged += (s, e) => VM.Data = this.DataContext as 设置PageViewModel;
这样只需要在Page里面添加2行代码就可以实现属性自动更新了.
PageViewModel 类型是继承 ViewModelBase 的. 带属性更新通知功能.引用Prism类就有.
前台绑定如下: 需要指定Mode,不然就是OneTime.
Text="{x:Bind VM.Data.说明, Mode=OneWay}"
使用x:Bind 绑定可以直接绑定到事件,方法等等.自带属性参数事件.听说效率也比Binding 高.
如:
IsPaneOpen="{x:Bind VM.Data.Is左侧打开, Mode=TwoWay}"
ItemClick="{x:Bind VM.Data.HamburgerMenu_OnItemClick}"
整个页面内代码:
namespace 年纪涛.简介.Views
{
/// <summary>
/// 可用于自身或导航至 Frame 内部的空白页。
/// </summary>
public sealed partial class 设置Page : Page
{
public 设置Page()
{
this.InitializeComponent();
DataContextChanged += (s, e) => VM.Data = this.DataContext as 设置PageViewModel;
} public Vm<设置PageViewModel> VM { get; } = new Vm<设置PageViewModel>(); }
}
标准实现接口的代码: 本次没使用.
/// <summary>
/// 继承此page,可以带属性更新通知和vm更新通知功能.
/// </summary>
/// <typeparam name="T"></typeparam>
public class PageBase<T> : Page, INotifyPropertyChanged where T : class
{
public event PropertyChangedEventHandler PropertyChanged; public PageBase()
{
DataContextChanged += (s, e) => VM.Data = DataContext as T;
}
public Vm<T> VM { get; } = new Vm<T>(); protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
为Page添加INotifyPropertyChanged功能的更多相关文章
- 033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试
什么叫做供货商药品目录t添加查询功能?就是说我们前面的博客里面不是说供货商登录后看到了自己供应的药品了么如下: 现在供货商想要往里面添加别的药品,那么这个药品的来源就是卫生局提供的那个Ypxx表(药品 ...
- 图像处理控件ImageGear for .NET教程如何为应用程序 添加DICOM功能(2)
在前面的一些关于图像处理控件ImageGear for .NET文章<图像处理控件ImageGear for .NET教程: 添加DICOM功能(1)>中讲解了如何对应用程序添加DICOM ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 添加查询功能
jQuery EasyUI 数据网格 - 添加查询功能 本实例演示如何从数据库得到数据,并将它们显示在数据网格(datagrid)中.然后演示如何根据用户输入的搜索关键词搜寻显示结果. 创建数据网格( ...
- 接入gitment为hexo添加评论功能
title: 接入gitment为hexo添加评论功能 toc: false date: 2018-04-16 10:59:56 categories: methods tags: hexo gitm ...
- 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...
- (三)开始在OJ上添加签到功能
在了解完OJ文件下的各个文件夹的主要作用后,我们开始往里面添加东西(其实只要知道各文件夹是干什么的后,添加东西也变得非常简单了) 一 在数据库中添加对应功能的字段. 我们这个学期才刚开数据库这门课,所 ...
- sharepoint 2010 如何给文档库或自定义列表添加评论功能
转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...
- 给destoon商城的列表中和首页添加购物车功能
如何给destoon商城的列表中和首页添加购物车功能? 目前加入购物车的功能只存在商城的详细页面里,有时候我们需要批量购买的时候,希望在列表页就能够使用这个加入购物车的功能. 修改步骤见下: 例如在商 ...
- Centos6.4 为用户添加sudo功能
sudo即super user do,以超级管理员的方式运行命令.使用时,只需在命令最前面加上sudo即可. 要为用户添加sudo功能,需要修改sudo的配置文件: vi /etc/sudoers ( ...
随机推荐
- MVC 之 T4模板简介
个人网站地址:nee32.com 一.T4模板内容简介 为了更好地学习T4模板,我们安装一个插件tangible T4 Editor 在使用了EF生成实体类后,我们会发现一个.tt后缀的文件,它就是T ...
- eclipse maven spring mvc el表达式无效
http://www.myexception.cn/javascript/2031310.html
- asp.net连接数据库
Asp.net web连接数据库步骤. 一. 新建一个web工程. 1.文件->添加->新建网站->asp.net web网站Winform窗体. 2.新建好的网站最下面有 ...
- 【POJ3691】DNA repair(AC自动机,DP)
题意: 生物课上我们学到,DNA序列中只有A, C, T和G四种片段. 经科学发现,DNA序列中,包含某些片段会产生不好的基因,如片段"ATC"是不好片段,则"AGATC ...
- (转)myeclipse插件—SVN分支与合并详解【图】
svn作为版本控制软件被广泛用于众多公司的开发团队中,最多的场景就是一个项目上传svn后,一个组内的小伙伴在上边提交和更新代码以及解决冲突,其实这只是发挥了svn的很小的一部分功能. 先稍微介绍一下s ...
- NPOI操作excel
1.基本导出方法 private void ExportToExcel() { SaveFileDialog sdfExport = new SaveFileDialog(); sdfExport.F ...
- 在oracle里写各种语句得心应手,但是在mybatis.xml文件里呢?
这个问题我让我搞了大半天,实在气人,话不多说,直接上代码 <select id="*" resultMap="Blog" parameterType=&q ...
- PTA Hashing
The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...
- Android之listview && adapter
今天我们讲的也是非常重要的一个控件listview-最常用也是最难的 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...
- Windows XP SP3 VC6环境下成功编译openssl-0.9.8zh
1.下载openssl-0.9.8zh解压到f:\openssl-0.9.8zh 下载nasm-2.12.03rc1解压到D:\develop\nasm-2.12.03rc1并把添加到系统环境变量PA ...