当客户端绑定一个数据模型以后,数据模型变化以后可以自动通知客户端更新界面显示,这就是INotifyPropertyChanged接口要做的工作。INotifyPropertyChanged 接口用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知。例如,考虑一个带有名为 FirstName 属性的 Person 对象。 若要提供一般性属性更改通知,则 Person 类型实现INotifyPropertyChanged 接口并在 FirstName 更改时引发 PropertyChanged 事件。 若要在将客户端与数据源进行绑定时发出更改通知,则绑定类型应具有下列功能:实现INotifyPropertyChanged接口。

当绑定的属性改变时,它可以通知客户端,并进行界面数据更新。而我们不用写很多复杂的代码来更新界面数据,这样可以做到方法简洁而清晰,松耦合和让方法变得更通用。可用的地方太多了:例如上传进度,实时后台数据变更等地方。

(另:对于集合Model:INotifyCollectionChanged结接口会有ObservableCollection自动实现(见上一篇))

一个简单的例子:(下面的例子中TextBlock绑定了DataContext的ModelName,点击按钮以后model更新,TextBlock会自动更新)

Model:

1 public class MyModel : INotifyPropertyChanged
2 {
3 public event PropertyChangedEventHandler PropertyChanged;
4
5 public int ModelID { get; set; }
6
7 private string _ModelName;
8 public string ModelName
9 {
10 get { return _ModelName; }
11 set
12 {
13 _ModelName = value;
14
15 if (PropertyChanged != null)
16 {
17 PropertyChanged(this, new PropertyChangedEventArgs("ModelName"));
18 }
19 }
20 }
21 }

Silverlight页面:

1 <Grid x:Name="LayoutRoot" Background="White">
2 <TextBlock Height="46" HorizontalAlignment="Left" Margin="187,51,0,0" Name="textBlock1" Text="{Binding ModelName}" VerticalAlignment="Top" Width="94" />
3 <Button Content="update" Height="39" HorizontalAlignment="Left" Margin="187,120,0,0" Name="button1" VerticalAlignment="Top" Width="106" Click="button1_Click" />
4  </Grid>

页面代码:

1 public MyView()
2 {
3 InitializeComponent();
4
5 MyModel m1 = new MyModel() { ModelID = 1, ModelName = "abc" };
6
7 this.DataContext = m1;
8 }
9
10  private void button1_Click(object sender, RoutedEventArgs e)
11 {
12 (this.DataContext as MyModel).ModelName = "abc_changed";
13 }

甚至还有一个VS2010插件来完成这个工作:NotifyPropertyWeaver

ViewModel也可以实现INotifyPropertyChanged接口,很简单:

XAML绑定集合:

1 <DataGrid ItemsSource="{Binding Path=LineItems}" />

ViewModel代码:

1 public class OrderViewModel : INotifyPropertyChanged
2 {
3 public OrderViewModel( IOrderService orderService )
4 {
5 this.LineItems = new ObservableCollection<OrderLineItem>(
6 orderService.GetLineItemList() );
7 }
8
9 public ObservableCollection<OrderLineItem> LineItems { get; private set; }
10 }

转载于:https://www.cnblogs.com/Areas/archive/2011/09/07/2169875.html

[Silverlight入门系列]使用MVVM模式(3):Model的INotifyPropertyChanged接口实现相关推荐

  1. Silverlight入门系列]使用MVVM模式

    [Silverlight入门系列]使用MVVM模式(9): 想在ViewModel中控制Storyboard动画? (2011-09-07 16:12) [Silverlight入门系列]使用MVVM ...

  2. Silverlight入门系列]使用MVVM模式(1):MVVM核心概念

    MVVM模式是Model.View.ViewModel的简称,最早出现在WPF,现在Silverlight中也使用该模式,MVVM模式是对MVC模式的变种.哪儿变了?我认为MVVM和MVC的主要变化在 ...

  3. [Silverlight入门系列]使用MVVM模式(1):MVVM核心概念

    编辑器加载中...MVVM模式是Model.View.ViewModel的简称,最早出现在WPF,现在Silverlight中也使用该模式,MVVM模式是对MVC模式的变种.哪儿变了?我认为MVVM和 ...

  4. [Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现

    本文说说ViewModel的这个INotifyPropertyChanged接口可以用来做啥? 举例1:我有个TabControl,里面放了很多View,每个由ViewModel控制,我想是想TabS ...

  5. [Silverlight入门系列]使用MVVM模式(6):使用Behavior

    Behavior把一些常用的行为封装成可重复使用的组件(Component),在理想状况下,Designer(设计师)或domain expert(特定领域的专家,例如财会人员.HR人员.或MIS)甚 ...

  6. 《北风网网友录制Silverlight入门系列视频教程》共23课时/更新完毕[压缩包]

    中文名: 北风网网友录制Silverlight入门系列视频教程 资源格式: 压缩包 版本: 共23课时/更新完毕 发行日期: 2012年03月05日 地区: 大陆 对白语言: 普通话 文字语言: 简体 ...

  7. WPF快速入门系列(8)——MVVM快速入门

    一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...

  8. [Silverlight入门系列]实现局部元素全屏(Element部分全屏)

    本文不讨论Silverlight全屏模式的实现,有关实现这个,可以参考TerryLee的这篇文章,核心代码就是这行: Application.Current.Host.Content.IsFullSc ...

  9. [Silverlight入门系列]用TransformToVisual和Transform取得元素绝对位置(Location)

    在Silverlight的Layout中,控件往往是相对放置,例如Grid/Border/ListBox等,这个时候就是要取得子控件的绝对位置(location)怎么办?使用场景很多,例如,我们点击一 ...

最新文章

  1. 如何将您的#100DaysOfCode登录转换为视觉体验
  2. 解决克隆clone github 仓库速度过慢的问题
  3. Fogengine概述
  4. 英特尔成立集成光电研究中心 加速光互连I/O创新
  5. Android开发笔记(一百零四)消息推送SDK
  6. JavaScript文档对象模型获取body元素对象和获取Html元素对象(3)
  7. 2.5 VB编程基础--运算符和表达式
  8. yuki翻译器钩子_GalGame 翻译器
  9. arm64-v8a、armeabi-v7a、armeabi、x86 abiFilters 详解
  10. 惠普、华三、华为、戴尔、联想服务器维保查询地址汇总
  11. android 打砖块教程,scratch教程-打砖块游戏
  12. oracle的userenv和nls_lang详解
  13. 苹果怎么开启开发者模式
  14. 微星MPG Z490 GAMING PLUS i7-10700K电脑 Hackintosh 黑苹果efi引导文件
  15. SCORM课程对接线上课程学习平台
  16. matlab expma,现代科学运算—MATLAB语言与应用-中国大学mooc-题库零氪
  17. 选对MP3播放器 享受无损纯音质
  18. 结对项目-小游戏连连看
  19. python3:小练习
  20. 凤舞丹心东方美,中华才女竞风采 ——黛兰娜杯《中华才女大赛》七月汇演

热门文章

  1. go编译成c语言,Go语言是怎么完成编译的
  2. Linux下载源码编译出错,linux下fortran中编译代码时“undefined reference to `_gfortran_st_”错误...
  3. 接口测试用例模板_ITest:京东数科接口自动化测试实践
  4. 系统架构图怎么画_简历的项目经历应该怎么写得好看?
  5. 基本机器学习面试问题 --- 理论/算法2
  6. 【Python-随机旋转】图像随机旋转及坐标进行旋转原理
  7. expecting statement错误的一种情况(phpstorm 8.0.2)
  8. python实现最长公共子序列的求解
  9. Ubuntu中配置NFS服务
  10. Java字符串与包装类