博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为Page添加INotifyPropertyChanged功能
阅读量:5326 次
发布时间:2019-06-14

本文共 2085 字,大约阅读时间需要 6 分钟。

在Page页面里面, DataContext 更新后,前台数据要求会自动更新.

但前台的绑定如果用x:bind 语法. 它要求强类型.直接关联到DataContext上就不行了.

需要为Page 添加 INotifyPropertyChanged 接口实现.

页面如果很多的话. 为每个页面实现此接口,代码将有不少重复.

为了减少代码重复量而努力.

现在要在页面代码里面添加vm属性.这是强类型.所以可以让前台使用x:bind.

public Vm
<设置pageviewmodel>
VM { get; } = new Vm
<设置pageviewmodel>
();

 

 vm泛型类定义如下: 这样当Data更新后,就会自动通知前台.

 

public class Vm
: 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{    ///     /// 可用于自身或导航至 Frame 内部的空白页。    ///     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>
(); }}
View Code

标准实现接口的代码: 本次没使用.

///     /// 继承此page,可以带属性更新通知和vm更新通知功能.    ///     /// 
public class PageBase
: Page, INotifyPropertyChanged where T : class { public event PropertyChangedEventHandler PropertyChanged; public PageBase() { DataContextChanged += (s, e) => VM.Data = DataContext as T; } public Vm
VM { get; } = new Vm
(); protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
View Code

 

转载于:https://www.cnblogs.com/NianJiTao/p/5985650.html

你可能感兴趣的文章
grep文本搜索工具详解
查看>>
2016031801 - 给移动硬盘分区
查看>>
Android Toast小解
查看>>
数据结构与算法问题 二叉排序树
查看>>
JAVA获取操作系统的信息
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
使用 Python 把多个 MP4 合成一个视频(转)
查看>>
php 递归无线级别分类
查看>>
Struts2 简单的增删改查
查看>>
浏览器F12之后-----你不一定不知道的事
查看>>
总想对你表白
查看>>
BSGS算法及拓展
查看>>
读完《大道至简》后的小感悟
查看>>
聊聊工作和职业规划
查看>>
认清性能问题
查看>>
Linux:CentOS7.4新建用户并授权
查看>>
求a加到b二进制加法有多少次进位。
查看>>
Multiple Contexts have a path of "/xxxx"问题解决
查看>>
[cocos2dx笔记010]用于UI的事件管理器
查看>>
[DLX反复覆盖] hdu 2828 Lamp
查看>>