用开源AOP简化MVVM框架
本文的前提是知晓基于Xaml开发,本文以WPF为例
一 、简化属性通知事件
普通的属性通知会写一个基于INotifyPropertyChanged接口的类
public class RasiePropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
} }
这样用时就可以在属性的Set里最后加上一句RasiePropertyChanged();就可以,但是如果属性只是简单的Get,Set写起来也是比较麻烦的
使用Fody/PropertyChanged可省去此麻烦
项目地址:https://github.com/Fody/PropertyChanged
使用方式如下,转自官方
[ImplementPropertyChanged]
public class Person
{
public string GivenNames { get; set; }
public string FamilyName { get; set; } public string FullName
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}
}
在类上边写上一个Attribute [ImplementPropertyChanged],类里的所有属性就都实现了属性通知事件
DoNotNotify:如果有某个属性不想实现通知事件,就在相应属性上加个[DoNotNotify]
AlsoNotifyFor:如果有某个属性像上边的FullName一样是2个属性的组合,任何一个变化都要通知都FullName变化,就在子属性GivenNames 和FamilyName上加个[AlsoNotifyFor("FullName")]
DependsOn:如果反过来FullName变了也让子属性变化,那就要在FullName上加上[DependsOn("GivenName","FamilyName")]
DoNotSetChanged:这个属性是说当FullName 的Set改变时,不会通知到子属性
DoNotCheckEquality:这个属性是说跳过相等的检查,没有实例,我也没有用过
二、简化ICommand的绑定事件
如果绑定一个Button 的点击事件,正常的后台是写一个DeletedCommand的属性
private ICommand _clickCommand;
public ICommand ClickCommand
{
get { return _clickCommand ?? new DelegateCommand(Click); }
set { _clickCommand = value; }
}
private Action Click()
{
throw new NotImplementedException();
}
然后前台绑定这个ClickCommand
使用Fody/Commander.Fody可省去写ICommand的属性
项目地址:https://github.com/DamianReeves/Commander.Fody
使用方式如下,转自官方
[OnCommand("ClickCommand")]
private Action Click()
{
throw new NotImplementedException();
}
如此就可以了
但是ICommand接口有2个方法,一个是Execute,一个是CanExecute
所以属性自然也是有2个,分别对应这2个方法OnCommand,OnCommandCanExecute
如有问题请参照项目说明和示例,本人只是恰巧看到了这2个简单的Fody的项目,简单用一下而已
用开源AOP简化MVVM框架的更多相关文章
- Android MVVM框架RoboBinding初探
RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便 ...
- “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
火热的MVVM框架 最近几年最热门的技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出不穷,而在众多前端框架中具有MVC,MVVM功能的框架成为耀眼新星,比如GitHub关注度很高的Vu ...
- 迷你MVVM框架 avalonjs 入门教程
新官网 请不要无视这里,这里都是链接,可以点的 OniUI组件库 学习教程 视频教程: 地址1 地址2 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定 作用域绑定(ms-contro ...
- 迷你MVVM框架 avalonjs1.5 入门教程
avalon经过几年以后,已成为国内一个举足轻重的框架.它提供了多种不同的版本,满足不同人群的需要.比如avalon.js支持IE6等老旧浏览器,让许多靠政府项目或对兼容性要求够高的公司也能享受MVV ...
- 使用Spring注解来简化ssh框架的代码编写
目的:主要是通过使用Spring注解的方式来简化ssh框架的代码编写. 首先:我们浏览一下原始的applicationContext.xml文件中的部分配置. <bean id="m ...
- JavaScript富应用MVC MVVM框架
对框架的挑选 Ember.js.Backbone.js.Knockout.js.Spine.js.Batman.js , Angular.js 1. 轻量级的应用选择哪一个会比较好?2. 那一个比较简 ...
- ViewModel从未如此清爽 - 轻量级WPF MVVM框架Stylet
Stylet是我最近发现的一个WPF MVVM框架, 在博客园上搜了一下, 相关的文章基本没有, 所以写了这个入门的文章推荐给大家. Stylet是受Caliburn Micro项目的启发, 所以借鉴 ...
- 使用Redisson实现分布式锁,Spring AOP简化之
源码 Redisson概述 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid).它不仅提供了一系列的分布式的Java常用对象,还提供了许多 ...
- 迷你MVVM框架 avalonjs 1.1发布
本版本添加了许多有用的功能,得益于用户量的增大,一些隐性BUG也暴露出来Fix掉了.强烈建议升级! 优化扫描流程: ms-skip(0) --> ms-important(1) --> m ...
随机推荐
- 基于Jquery Validate 的表单验证
基于Jquery Validate 的表单验证 jquery.validate.js是jquery下的一个验证插件,运用此插件我们可以很便捷的对表单元素进行格式验证. 在讲述基于Jquery Vali ...
- Input框去掉蓝色边框
Input框去掉蓝色边框: <input type="text" name="" value="" class="Inpt& ...
- hdu-5690 All X(快速幂+乘法逆元)
题目链接: All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pro ...
- 【转】IT管理人才必备的十大能力
作为IT技术人员,相信没有一个人愿意永远在底层编写程序或做简单的系统维护.经过一段时间的技术和经验的积累,很多人都向往更高层的职位,但如何能成为一个专业的IT管理人才,并不是每一个人都清晰.明了. & ...
- Android ListView动态改变Item高度
在adapter的getView方法中进行设置,代码如下 @Override public View getView(int position, View convertView, ViewGroup ...
- 关于div 浮动在select,或table控件之上
<div style="position:absolute; display:none; z-index:99999" id="d3" onmouseov ...
- 怎么手写Ajax实现异步刷新
所谓的异步刷新,就是不刷新整个网页进行更新数据. 只有通过js才能实现Ajax,进而实行异步刷新 表单提交数据和Ajax提交数据的区别:表单提交是提交的整个页面中的数据,提交数据之后会抛弃之前的页面( ...
- Objective-C 【NSString-字符串比较&前后缀检查及搜索】
———————————————————————————————————————————NSString 字符串比较 #import <Foundation/Foundation.h> vo ...
- UI3_UIbarButtonItem
// // AppDelegate.m // UI3_UIbarButtonItem // // Created by zhangxueming on 15/7/6. // Copyright (c) ...
- webpShere中数据库集群url的设置
数据源配置的URL如下: jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10 ...