实现方法参考:
http://www.cnblogs.com/024hi/archive/2009/05/17/Let_Implementation_Of_INotifyPropertChanged_More_Graceful.html
这里面出现了三个值得注意的地方:1、强类型 2、扩展方法 3、Model类的实现。下面一个一个说。
1、强类型
一直说C#是强类型语言,通俗地讲,便是指C#中的“变量”在开发时的类型便是明确的:String便是String,Int32就是Int32,毫无争议。强类型的好处有很多,张嘴便可随意举上几例:
- 能够享受代码提示功能
- 能够获得重构工具的支持
- 能够在编译期发现更多错误
- ……
不过C#也不是“绝对”的强类型语言,因为它也有弱类型,那就是Object。我们知道Object是所有类型的最终基类,任何类型的对象都可以使用Object来引用。可是一旦转化成Object的变量之后,代码提示便消失了;即使我们“明确”对象的确切类型,也必须通过Cast才能使用——更何况它形成了一种被“滥用”或“误用”的机会。例如一段错误代码可能会传入一个不符合约定类型的对象,那么就会造成错误。更严重的是,这样的错误可能只要在“运行时”才能被发现,编译器对此无能为力。
总是使用强类型的视图,并且所有数据都从Model中获取。
这是针对ASP.NET MVC 中的每种视图(View,Partial,Layout)都可以选择弱类型和强类型两种“基类”,两者的区别便是Model的类型来说的。但在WPF中,原理是一样的。这么做可能会在一定程度上增加了代码量,因为我们需要为每个视图建立一个Model,不过我认为这是值得的。在强类型的视图中,VS中能够对Model的各种成员做出丰富的代码提示,我们便可以快速地输入代码,并确保不会出现“拼写”之类的低级错误。
因此,可以使用Lambda Expression这个强类型的表示方法来“告诉”NotifyPropertyChanged方法究竟该生成导向至哪个属性方法的链接。
参考:http://www.cnblogs.com/JeffreyZhao/archive/2009/02/27/mvc-use-strong-type-everywhere.html
2、扩展方法
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
得到两点有用信息1 不用修改原始类型,不用创建新的派生类2 扩展方法是静态的
类似于python里的装饰器啊。(不一定对)
理解能力还是需要提高啊。下面四点参考 http://kb.cnblogs.com/page/42577/ (一个非常不错的系列)
扩展方法:
1 方法所在的类必须是静态的
2 方法也必须是静态的
3 方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。
4 在第一个参数前面还需要有一个this关键字。
参考:https://msdn.microsoft.com/zh-cn/library/bb383977.aspx
3、Model类的实现
Model类的实现只有一个问题一直困扰我,那就是声明的public event PropertyChangedEventHandler PropertyChanged;
是在什么时候绑定了方法?绑定的应该是对应控件的set方法。并且,ModelBase中也有PropertyChanged!=null的判断。