为什么后台绑定的值改变了前台不发生变化了?

针对这个初学者很容易弄错的问题,这里介绍一下INotifyPropertyChanged的用法

INotifyPropertyChanged:用于绑定属性更新

   /// <summary>
/// 实体基类,实现了属性通知
/// </summary>
public class BaseEntity : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; /// <summary>
/// 触发属性通知
/// 这里用了一个特性的小技巧,就是CallMemberName
/// 通过反射来获取调用者的名称,从而避免每一次调用方法都需要将属性名称传入方法
/// </summary>
/// <param name="propertyName"></param>
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}

学生类继承自实体基类,通过继承的OnPropertyChanged方法来通知属性已经发生改变

     /// <summary>
/// 学生类
/// </summary>
public class Student : BaseEntity
{
private string _name; /// <summary>
/// 名字
/// </summary>
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged();
}
} private int _age; /// <summary>
/// 年龄
/// </summary>
public int Age
{
get { return _age; }
set
{
_age = value;
OnPropertyChanged();
}
} private double _score; /// <summary>
/// 分数
/// </summary>
public double Score
{
get { return _score; }
set
{
_score = value;
OnPropertyChanged();
}
}
}

在ViewModel中声明一个Student,并且生成相应事件

  public class MainWindowViewModel
{
public Student LiLei { get; set; } public MainWindowViewModel()
{
InitStudentInfo();
StartUpdateScore();
} //初始化学生信息
private void InitStudentInfo()
{
LiLei = new Student
{
Name = "李雷",
Age = ,
Score = 91.5
};
} //开始更新分数
private void StartUpdateScore()
{
//定义一个定时器,改变分数值,若小于100分,那么增加,否则将到达一个特定分数
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds() };
timer.Tick += (sender, e) =>
{
if (LiLei.Score < )
{
LiLei.Score++;
}
else
{
LiLei.Score = 89.5;
}
};
timer.Start();
}
}

前台Xaml

  <Grid>
<StackPanel>
<TextBlock>
<Run Text="姓名:"/>
<Run Text="{Binding LiLei.Name}"/>
</TextBlock>
<TextBlock>
<Run Text="年龄:"/>
<Run Text="{Binding LiLei.Age}"/>
</TextBlock>
<TextBlock>
<Run Text="分数:"/>
<Run Text="{Binding LiLei.Score}"/>
</TextBlock>
</StackPanel>
</Grid>

后台绑定

     public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}

效果图:

一个简单是示意例子,其实在大部分的Mvvm框架中,都有一些类是实现了属性通知的,会有相应的方法可以调用,一般不用自己去实现INotifyPropertyChanged接口

属性通知之INotifyPropertyChanged的更多相关文章

  1. wpf 属性变更通知接口 INotifyPropertyChanged

    在wpf中将控件绑定到对象的属性时, 当对象的属性发生改变时必须通知控件作出相应的改变, 所以此对象需要实现 INotifyPropertyChanged 接口 例: //实现属性变更通知接口 INo ...

  2. 属性通知之ObservableCollection

    单个属性是如何去通知,在上一章已经介绍过了,那么集合如何做到属性通知呢?这里要介绍ObservableCollection<T>,字面意思就是用于观察的集合. msdn上给出的定义是:表示 ...

  3. WPF PropertyChanged实现子属性通知

    今天用WPF的View绑定了ViewModel的一个属性类,结果在属性类的子属性修改时,没有通知到UI. 如有要显示一个学生信息,采用WPF MVVM的模式,则前端代码 <StackPanel& ...

  4. 属性更改通知(INotifyPropertyChanged)——针对ObservableCollection

    问题 在开发webform中,wpf中的ObservableCollection<T>,MSDN中说,在添加项,移除项时此集合通知控件,我们知道对一个集合的操作是CURD但是恰恰没有Upd ...

  5. Android之Bean属性通知类

    调用: import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import android. ...

  6. INotifyPropertyChanged 接口 CallerMemberName属性

    调用方信息 使用调用方信息属性,可以获取关于调用方的信息传递给方法. 可以获取源代码.行号在源代码和调用方的成员名称的文件路径. 此信息用于跟踪,调试和创建诊断工具非常有用.若要获取此信息,则使用适用 ...

  7. 【WPF学习笔记】之WPF基础:依赖关系属性和通知

    这些天来,对象似乎已经忙得晕头转向了.每个人都希望它们做这做那.Windows® Presentation Foundation (WPF) 应用程序中的典型对象会接到各种各样不同的请求:有要求绑定到 ...

  8. Fody,告别烦人的INotifyPropertyChanged,最简方式实现通知!

    INotifyPropertyChanged 我不是针对谁,我是说在座的各位 相信所有学wpf的,都写过类似下面的代码: 实现INotifyPropertyChanged public class M ...

  9. 如何优雅的实现INotifyPropertyChanged接口

    INotifyPropertyChanged接口在WPF或WinFrom程序中使用还是经常用到,常用于通知界面属性变更.标准写法如下: class NotifyObject : INotifyProp ...

随机推荐

  1. HDU 4593 Robot (水题)

    题意:有 n 个数,其中有两个数中相同的,让你找出这个数. 析:太简单了么,只要用数组下标记一下这个数的数量即可. 代码如下: #include <iostream> #include & ...

  2. 我的Memcache学习笔记

    一.编绎安装Memcached 二.Memcached基本命令 四.PHP扩展模块安装 五.设置session用memcache来存储 六.PHP使用Memcache的一致性哈希连接方式 七.Memc ...

  3. hdoj 1729 Stone Games(SG函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1729 看了题目感觉像Nim,但是有范围限制,有点不知道SG函数该怎么写 看了题解,最后才明白该怎么去理 ...

  4. OC中控制台日志打印

    OC中Debug版本常用的打印格式化操作   %@ 对象   %d,%i 整型 (%i的老写法)   %hd 短整型   %ld , %lld 长整型   %u 无符整型   %f 浮点型和doubl ...

  5. java中Arrays类中,binarySearch()方法的返回值问题

    最近在复习Java知识,发现果然不经常使用忘得非常快... 看到binarySearch()方法的使用时,发现书上有点错误,于是就自己上机实验了一下,最后总结一下该方法的返回值. 总结:binaryS ...

  6. Ajax随笔

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  7. 备份服务器数据(IIS配置备份还原、任务计划、服务列表和APP)

    该脚本可以用来导出IIS配置.任务计划.服务列表和APP,同时支持Windows 2003和2008. #定义备份位置 $iisfolder = "d:\Backup_all\IIS&quo ...

  8. c++课程实训 银行储蓄系统

    基本要求:定义了用户类(User)和银行类(Bank),用成员函数实现各种功能,多文件组织程序.能用文本文件存取数据(如演示样例中给出的技术): 拓展方向: 序号 加分项目 细       则 1 改 ...

  9. 【M23】考虑使用其他程序库

    1.程序库的设计是一种权衡的结果.体积小,速度快往往不能移植.可移植,通用的程序库往往意味着冗余和效率低下. 2.因此,选择程序库的时候,需要进行取舍.比如:iostream和stdio.iostre ...

  10. UVA 12904 Load Balancing 暴力

    Load Balancing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vi ...