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

当客户端绑定一个数据模型以后,数据模型变化以后可以自动通知客户端更新界面显示,这就是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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

inttostr java_Delphi和Java实现webservice架构

Webservice现在已经不是什么新技术了&#xff0c;用java建立webservice是快捷的&#xff0c;但是用java在制作客户端的感觉上总是不如 Delphi的(个人感觉&#xff0c;java高手们不要笑话我)&#xff0c;那我们就用java实现webservice的服务端程序&#xff0c;delphi制作客户端。…

XML DOM 节点

来自&#xff1a;w3cschool菜鸟教程 在 DOM 中&#xff0c;XML 文档中的每个成分都是一个节点。 DOM 节点 根据 DOM&#xff0c;XML 文档中的每个成分都是一个节点。 DOM 是这样规定的&#xff1a; 整个文档是一个文档节点每个 XML 元素是一个元素节点包含在 XML 元素中的文本是…

CentOS系列启动流程和内核原理(5系列,6系列,7系列)

前言&#xff0c;本来让我写博客我是拒绝的然而看见大家都在写&#xff0c;还能不能一起友好的玩耍了&#xff1f; 我要是不写怎能和同大神们一起ZB呢&#xff1f;遂开博客&#xff01; 一、Linux启动内核文件 1.Linux系统组成 动态视角&#xff1a;内核根文件系统 静态视…

如何在CentOS 5.5上安装Kippo蜜罐

Kippo是一个可交互的SSH蜜罐&#xff0c;旨在记录暴力攻击行为&#xff0c;最重要的是可以记录攻击者的shell交互行为&#xff0c;如果你需要了解有关Kippo更多信息&#xff0c;请访问它的官方网站http://code.google.com/p/kippo/&#xff0c;本教程只教你如何在CentOS 5.5服务…

LSTM和GRU vs 循环神经网络RNN

1、考虑下列三种情况下&#xff0c;对比一下普通RNN的表现和LSTM和GRU表现&#xff1a; &#xff08;1&#xff09;早期观测值对预测未来观测者具有非常重要的意义。 考虑一个极端情况&#xff0c;其中第一个观测值包含一个校验和&#xff0c; 目标是在序列的末尾辨别校验和是…

uva10617 - Again Palindrome(dp)

再次回文 输入&#xff1a;标准输入 输出&#xff1a;标准输出 时间限制&#xff1a; 2秒 是palindorme的读取相同的从左边&#xff0c;因为它从右侧的一个或多个字符的序列。例如&#xff0c;Ž&#xff0c;TOT和女士的 回文&#xff0c;但是&#xff0c;ADAM是不是。 给定一个…

java ora-12505_Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)

用oracle数据库新建连接时遇到ora-12505&#xff0c;此问题解决后又出现ora-12519错误&#xff0c;郁闷的半天&#xff0c;经过一番折腾问题解决&#xff0c;下面小编把我的两种解决方案分享给大家&#xff0c;仅供参考。解决方案一&#xff1a;今天工作时在新建连接的时候遇到…

例题9-6 UVa11400 Lighting System Design(DP)

题意&#xff1a; 看白书 要点&#xff1a; 其他的白书上讲的比较清楚了&#xff0c;状态转移方程为&#xff1a;d[i] min(d[i], d[j] (s[i] - s[j])*bulb[i].c bulb[i].k)&#xff0c;有点难以理解的是如果i到j之中有的不进行换比较合理怎么办&#xff1f;但其实这种情况是…

【Silverlight】解决DataTemplate绑定附加属性

本文 Silverlight 版本&#xff1a;4.0。 首先定义数据类型&#xff0c;此文始终使用此定义类型。public class SimpleData : ViewModelBase{private string _text;private int _column, _row;public string Text { get { return _text; } set { _text value; OnPropertyChang…

青春无悔

青春像是一座城&#xff0c;放纵的思想、禁锢的世界总让自己感到如履薄冰&#xff0c;只能踽踽独行在阡陌的途中&#xff0c;我喜欢世界是自由的&#xff0c;我喜欢生活是淡然的&#xff0c;淡然的境界早已挣脱时空的枷锁&#xff0c;穿行在历朝历代&#xff0c;如莲花般盛开在…

java中udi_Java读取.properties配置文件的方法

java中的properties文件是一种配置文件&#xff0c;主要用于表达配置信息&#xff0c;文件类型为*.properties&#xff0c;格式为文本文件&#xff0c;文件的内容是格式是 "键值"的格式&#xff0c;在properties文件中&#xff0c;可以用"#"来作注释&#…

android 中文 api (72) —— BluetoothSocket[蓝牙]

前言 本章内容是 android.bluetooth.BluetoothSocket&#xff0c;为Android蓝牙部分的章节翻译。蓝牙通讯套接字&#xff0c;代表了与远端设备的连接点&#xff0c;使用socket本地程序可以通过inputstream和outputstream与远端程序进行通讯。版本为 Android 2.3 r1&#xff0c;…

Linux常用命令(二)

19. 文件压缩命令 &#xff08;1&#xff09;。gzip [文件名]  压缩后的文件格式是.gz   只能压缩文件不能压缩目录 不保留源文件 &#xff08;2&#xff09;。gunzip [文件名]  解压缩命令 &#xff08;3&#xff09;。tar 选项[cvf] [目录]  打包目录  压缩后的文件…

五行代码终极完美解决从IE6到Chrome所有浏览器的position:fixed;以及闪动问题

这个方法其实已经使用很久了&#xff0c;之前主要在嵌入式WebQQ等产品中用过&#xff0c;现在拿出来分享一下吧&#xff0c;是目前最简洁的方式来实现ie6的position:fixed; 失效bug&#xff0c;以及的其他方法的闪动问题&#xff0c;CSS代码如下&#xff0c;很简单&#xff0c;…

致年轻开发人员的一封信

我收到了很多年轻开发人员写给我的邮件&#xff0c;希望可以提升自己的编程能力。我肯定不是第一个讨论这个话题的人&#xff0c;所以我不确定还可以说出什么新意。然而&#xff0c;这里我认为还是非常值得列出我认为很重要的几点吧。 要跟其他开发者一起工作。我们正处在科技史…

笔记整理之 SHELL 变量

变量的类型&#xff1a;1.自定义变量定义变量&#xff1a; 变量名变量值 变量名必须以字母或下划线开头&#xff0c;区分大小写 url1test.3glong.com 引用变量&#xff1a; $变量名 或 ${变量名} 查看变量&#xff1a; echo $变量名 set(所有变量&#xff1a;包括自定…

Node的异步与java的异步_node.js和异步编程回文

以下代码不是异步的&#xff0c;为什么以及如何制作呢&#xff1f;function compute(callback){for(var i 0; i < 1000 ; i){}callback(i);}我将假设你的代码试图说&#xff0c;“我需要做1000次&#xff0c;然后在一切都完成时使用我的回调” .即使你的for循环也不会在这里…

N个三角形分割平面个数(数学)

一个三角形的时候&#xff0c;再加一个三角形&#xff0c;每一条变会与第一个三角形的两条边相交&#xff0c;这样增加2个小三角形&#xff0c;即两个面。f(2)3*2f(1)&#xff0c;再加一个三角形&#xff0c;每一条边会与前两个三角形的四条边相交&#xff0c;形成四个小三角形…

2011年9月19日 面试重点:asp.net运行原理和生命周期

面试重点&#xff1a;asp.net运行原理和生命周期1、ispostback回调机制isPostBackfalse !IsPostBackture 当前页面是第一次加载IsPostBack 由于用户交互(page.submit())提交页面而产生的加载,二次加载html客户端代码将ispostback值存放在viewstate隐藏字段中<input type&quo…

redis——集群

2019独角兽企业重金招聘Python工程师标准>>> 现实中redis需要若干台redis服务器的支持&#xff1a; &#xff08;1&#xff09;从结构上&#xff0c;单个Redis服务器会产生单点故障&#xff0c;同时一台服务器需要承受所有的请求负载。这就需要为数据生成多个副本并…