接上篇,我们在MainViewModel类中创建个属性:

public string Name { get; set; }



然后去UI的xaml文件中binding一下:



此时运行程序是不会得到我们想要的结果的,因为还没有设置DataContext。

我们去设置下DataContext:



debug下,按理说UI的button会找到DataContext的Name属性,显示我们的MainViewModel.Name



关于绑定的最好的事情之一是它们使UI与视图模型中的数据保持同步。但是此时我们更改FirstName属性,UI上是不会跟随同步的,因为我们的MainViewModel虽然继承了INotifyPropertyChanged接口但是我们并没有应用。为了实现修改mainViewModel中的属性值后就自动更新到UI上,我们需要应用该接口:



然后,为button创建个事件,当按钮按下后修改MainViewModel的name属性:





debug下试试:



但是,记住每次更改属性值时都会引发事件,这会非常繁琐。由于这种模式非常普遍,因此许多MVVM框架为您的视图模型类提供了一个基类,类似于以下内容:

public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; protected bool SetProperty<T>(ref T field, T newValue, [CallerMemberName]string propertyName = null)
{
if(!EqualityComparer<T>.Default.Equals(field, newValue))
{
field = newValue;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}
return false;
}
}

这使我们可以像这样重写Name属性:

public class ViewModel : ViewModelBase
{
private string name;
public string Name
{
get => name;
set => SetProperty(ref name, value);
}
}

每次我们更改Name属性时,都会引发INPC事件

工程源代码上传在GitHub上了:https://github.com/feipeng8848/WPF-Demo

参考资料:

https://intellitect.com/getting-started-model-view-viewmodel-mvvm-pattern-using-windows-presentation-framework-wpf/

WPF入门(2)——数据绑定与INotifyPropertyChanged(INPC)的更多相关文章

  1. WPF入门:数据绑定

    上一篇我们将XAML大概做了个了解 ,这篇将继续学习WPF数据绑定的相关内容 数据源与控件的Binding Binding作为数据传送UI的通道,通过INotityPropertyChanged接口的 ...

  2. WPF 入门《数据绑定》

    简单而言, 数据绑定是一种关系, 这种关系告诉WPF 从一个源目标对象中提取一些信息, 并且使用该信息设置为目标对象的属性.目标属性总是依赖项属性, 并且通常位于WPF元素中. 然而, 源对象可以是任 ...

  3. WPF入门教程系列十五——WPF中的数据绑定(一)

    使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...

  4. CPF 入门教程 - 数据绑定和命令绑定(二)

    CPF netcore跨平台UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) 数据绑定和Wpf类似,支持双向绑定.数据绑定和命令绑定是UI和业务逻辑分离的基础 ...

  5. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  6. WPF中的数据绑定!!!

    引用自:https://msdn.microsoft.com/zh-cn/magazine/cc163299.aspx  数据点: WPF 中的数据绑定 数据点 WPF 中的数据绑定 John Pap ...

  7. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...

  8. WPF学习之数据绑定

    WPF中的数据绑定提供了很强大的功能.与普通的WinForm程序相比,其绑定功能为我们提供了很多便利,例如Binding对象的自动通知/刷新,Converter,Validation Rules,Tw ...

  9. WPF 精修篇 数据绑定到对象

    原文:WPF 精修篇 数据绑定到对象 数据绑定到对象 首先 我们需要一个对象 public class Preson { private string name; public string Name ...

随机推荐

  1. Spring事务异常回滚

    最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......    为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常 ...

  2. ReactiveCocoa实践

    1.按钮addTarget [[self.aDepositBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNe ...

  3. Java并发指南11:解读 Java 阻塞队列 BlockingQueue

    解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...

  4. 虚拟Linux系统使用Windows系统oracle数据库

    前提:本地oracle数据库能正常使用. 数据库:oracle 11g 虚拟机:VMware_workstation_full_12.5.2 本机系统:Windows 7 旗舰版 虚拟机系统:open ...

  5. Installing the Solidity Compiler¶

    Versioning¶ Solidity versions follow semantic versioning and in addition to releases, nightly develo ...

  6. P1944 最长括号匹配_NOI导刊2009提高(1)

    P1944 最长括号匹配_NOI导刊2009提高 题解 宁愿相信世上有鬼,也不能随便相信某谷题目标签 我想了半天然后看了眼题解,发现用栈来模拟就好了 栈来模拟,还要用到一个bool数组,标记是否已经匹 ...

  7. 一个有趣的BUG/按钮disabled之后还能触发click事件

    一个很有意思的Bug 某天测试同学再次向我反馈,你这个删除按钮虽然置灰了,但是还是可以点击啊? 我:????(黑人问号) 卧槽?不可能啊,按钮都disabled了,怎么还可以点击?还能触发click事 ...

  8. SQL-W3School-高级:SQL 数据类型

    ylbtech-SQL-W3School-高级:SQL 数据类型 1.返回顶部 1. Microsoft Access.MySQL 以及 SQL Server 所使用的数据类型和范围. Microso ...

  9. 第一个smarty例子--分页显示数据

    模板页index.tpl:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  10. Qt打开文件QFileDialog

    //打开Pts文件按钮点击事件void AnalysisPtsDataTool201905::OnOpenFileButtonClick(){ qDebug()<<"open f ...