在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功能的更多相关文章

  1. 033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试

    什么叫做供货商药品目录t添加查询功能?就是说我们前面的博客里面不是说供货商登录后看到了自己供应的药品了么如下: 现在供货商想要往里面添加别的药品,那么这个药品的来源就是卫生局提供的那个Ypxx表(药品 ...

  2. 图像处理控件ImageGear for .NET教程如何为应用程序 添加DICOM功能(2)

    在前面的一些关于图像处理控件ImageGear for .NET文章<图像处理控件ImageGear for .NET教程: 添加DICOM功能(1)>中讲解了如何对应用程序添加DICOM ...

  3. 雷林鹏分享:jQuery EasyUI 数据网格 - 添加查询功能

    jQuery EasyUI 数据网格 - 添加查询功能 本实例演示如何从数据库得到数据,并将它们显示在数据网格(datagrid)中.然后演示如何根据用户输入的搜索关键词搜寻显示结果. 创建数据网格( ...

  4. 接入gitment为hexo添加评论功能

    title: 接入gitment为hexo添加评论功能 toc: false date: 2018-04-16 10:59:56 categories: methods tags: hexo gitm ...

  5. 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

    创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...

  6. (三)开始在OJ上添加签到功能

    在了解完OJ文件下的各个文件夹的主要作用后,我们开始往里面添加东西(其实只要知道各文件夹是干什么的后,添加东西也变得非常简单了) 一 在数据库中添加对应功能的字段. 我们这个学期才刚开数据库这门课,所 ...

  7. sharepoint 2010 如何给文档库或自定义列表添加评论功能

    转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...

  8. 给destoon商城的列表中和首页添加购物车功能

    如何给destoon商城的列表中和首页添加购物车功能? 目前加入购物车的功能只存在商城的详细页面里,有时候我们需要批量购买的时候,希望在列表页就能够使用这个加入购物车的功能. 修改步骤见下: 例如在商 ...

  9. Centos6.4 为用户添加sudo功能

    sudo即super user do,以超级管理员的方式运行命令.使用时,只需在命令最前面加上sudo即可. 要为用户添加sudo功能,需要修改sudo的配置文件: vi /etc/sudoers ( ...

随机推荐

  1. Spring JDBC

    转载:博客主页:http://blog.csdn.NET/chszs 一.概述 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1)core即核心包,它包含了JDBC的核心功能.此包内 ...

  2. Endless Sky源码学习笔记-3

    文本解析: 将txt存入DataFile,DataFile包含DataNode,每个DataNode是txt中的一行,每个DataNode包含若干token(std::vector<string ...

  3. machine learning----->Amazon Machine Learning机器学习平台

    参考资料: 1.如何使用Amazon Machine Learning平台构建你的机器学习预测模型 2.

  4. CSS3 animation 的尝试

    下面是动画效果: .zoombie { width: 55px; height: 85px; background-image: url("http://images2015.cnblogs ...

  5. Hibernate 知识点梳理

    1.对持久化对象的要求 1)提供一个无参构造器 2)提供一个标识属性,如id,通常映射为数据库表的主键字段. 3)为持久化类的字段提供get.set方法. 注:但不一定所有字段都这么做,对于不提供ge ...

  6. Linux cp命令使用说明

    Linux cp命令使用说明 --功能说明:复制目录或文件 --命令格式:cp  [参数]  <文件或目录>  <文件或目录> --常用参数: -R 复制目录 -i 覆盖文件之 ...

  7. [刘阳Java]_MyBatis_映射文件的select标签入门_第3讲

    1.Mybatis映射文件的<select>标签主要帮助我们完成SQL语句查询功能,<select>标签它包含了很多属性,下面简单对<select>标签的属性做一个 ...

  8. subversion

    yum install apr-util-devel.x86_64 sqlite-devel https://subversion.apache.org/download.cgi ./configur ...

  9. Form表单(回车)提交问题

    我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...

  10. Nginx+tomcat负载均衡时静态页面报404

    百度到的问题解决BLOG http://os.51cto.com/art/201204/326843.htm nginx+2台tomcat负载均衡,应用程序已部署,单独访问tomcat时,可以访问到所 ...