摘要: 查了不少资料,大概理清楚的就是有3种。当然类名可以自己取了,不过为了便于记忆和区分,还是和看到的文章里面用一样的类名。1.DelegateCommand2.RelayCommand3.AttachbehaviorCommand因为MVVM模式适合于WPF和SL,所以这3种模式中也有一些小差异,比如RelayCommand下面的CommandManager方法就是WPF下面的,SL下面无法使用,不过我认为这3种方法中的基本思路都如出一辙,都是出自那位外国牛人的文章里面。主要的区别在于和VIEW中的控件的绑定使用上。有点不同的attachbehaviorcommand是prism4里面的一种设计模 阅读全文
posted @ 2013-06-07 16:28 三叶草╮ 阅读(542) 评论(0) 推荐(0)
摘要: 在讲述自定义命令之前,先了解一下与命令有关的几个要素,就像我们常说的“记叙文六要素”一样,一个完整的命令应当包括:1、命令,这当然是核心部分了;2、命令源:命令是谁发出的;3、目标,命令作用在哪些元素上,如往文本框中粘贴内容,那么该TextBox就是命令目标;严格上说,命令是实现了ICommand接口的类,但是,在际使用中,我们不必这样做,一种有效的方法是在某个类中直接声明一个RouteCommand类的成员字段即可,一般使用Static关键字,这样可以使得命令只与类有关,而不必理会其属于哪个实例。下面,我们一起动手完成一个实例:1、新建一个WPF应用程序,如何新建?(略);2、布局好主窗体, 阅读全文
posted @ 2013-06-04 14:17 三叶草╮ 阅读(424) 评论(0) 推荐(0)
摘要: 前言MVVM 就是 Model – View – ViewModel 三组功能(类)分割的设计模式。废话不多说,不知道的自己上网查。用 MVVM 我认为最大好处是能对 ViewModel 做单元测试。另外,MVVM 分工也比较明显,方便安排程序员分组分工进行项目,基本设计有了之后可以各自敲。这样的话,写出来,类(class)最起码有三个。比如 Window1 作为 View,Window1ViewModel 作为 ViewModel,实际业务类比如 Sales Order 销售订单作为 Model。View 不一定要是 System.Control.Window,UserControl 也可以 阅读全文
posted @ 2013-06-03 11:50 三叶草╮ 阅读(303) 评论(0) 推荐(0)
摘要: ViewModelBase和CommandBase代码的整理如下:1.ViewModelBase.cs[c-sharp] view plaincopyusingSystem;usingSystem.ComponentModel;usingSystem.Linq.Expressions;///<summary>///WPFMVVC设计模式ViewMode基本功能类///</summary>publicabstractclassViewModelBase:INotifyPropertyChanged,IDisposable{#regionPublicProperties// 阅读全文
posted @ 2013-06-03 11:48 三叶草╮ 阅读(943) 评论(0) 推荐(0)
摘要: Binding的亮点 在WPF中,Binding无处不在,关于Binding的漂亮用法有很多,其主要的设计亮点有二:Weak Event模式Converter 监听B的属性变化,A需要注册B的PropertyChanged事件,.net中事件是强引用,一旦A注册了B的事件,B就持有了一个A的引用。也就是说,如果A不注销B的事件,即使A已经空置,如果B对象存活,垃圾回收器仍不会回收A的内存,在使用中就造成了A的内存泄露。在Binding的使用过程中,可能会出现多级绑定,A->B->C,一个对象也可能绑定多个对象,在对象空置时注销绑定的监听事件是不太现实的,实现起来太过繁琐。这里就期望 阅读全文
posted @ 2013-05-31 17:44 三叶草╮ 阅读(397) 评论(0) 推荐(0)
摘要: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"这个命名空间存放的就是XAML和XAML编译器沟通的东西,比如编译时与那个C#代码合并等一、 在XAML中出现的方式有三种1.标签扩展: x:Array, x:Null, x:Static, x:Type2. XAML指令元素: x:Code, x:XData3. Attribute: x:Class, x:ClassModifier, x:FieldModifier, x:Key, x:Name, x: Shared, X:Subclass, x:TypeArgum 阅读全文
posted @ 2013-05-29 15:14 三叶草╮ 阅读(196) 评论(0) 推荐(0)
摘要: 表达式在右边的 Lambda 表达式称为“Lambda 表达式”。Lambda 表达式在构造表达式树(C# 和 Visual Basic)时广泛使用。Lambda 表达式返回表达式的结果,并采用以下基本形式:(input parameters) => expression只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。两个或更多输入参数由括在括号中的逗号分隔:C#(x, y) => x == y有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型:C#(int x, string s) => s.Length 阅读全文
posted @ 2013-05-29 09:44 三叶草╮ 阅读(202) 评论(0) 推荐(0)
摘要: 在WPF中。有着两种资源, 一种是组件资源:又被称为程序集资源,以二进制存在编译后的程序集中,通常用于存放图片或其他音频文件. 第二种是对象资源:通常放于xaml中。比如WPF的样式和数据绑定特性. demo地址 http://download.csdn.net/source/3449754 组件资源:和以前的WINFORM 和WEB中的图片资源一样 获取方式:例如在程序中添加了一个图片。可以直接通过下面 在XAML中添加:<Image x:Name="image1"Source="image/Desert.jpg"></Image&g 阅读全文
posted @ 2013-05-28 15:02 三叶草╮ 阅读(637) 评论(0) 推荐(0)
摘要: 我们知道,XAML标签会对应一个实例。如果在XAML里初始化实例的属性,我们有两种语法可以选择:直接使用Attribute="Value"的方法属性元素(Property Element)方法今天我们讨论的核心就是——第一种方法是如何实现的。先看一个例子。我为一个Grid设置了矢量渐变画刷:<Grid><Grid.Background><LinearGradientBrushStartPoint="0,0"EndPoint="1,1"><GradientStopOffset="0&q 阅读全文
posted @ 2013-05-24 15:33 三叶草╮ 阅读(258) 评论(0) 推荐(0)
摘要: 实际编程中,因为我们较多地使用到Binding类的Source与Path,所以可能会有一个思维定式,那就是:有可能作为数据源的类一定要准备好一些属性,这些属性将作为Binding的Path。如果本着这个思想去设计有可能作为数据源的类,那么会有两个问题出现:1. 这个类的哪些属性有可能作为数据源的Path?是都需要激发NotifyPropertyChanged事件,还是用到了再添加?这很有可能让这个类迟迟不能封闭。2. 需要用属性把一些方法包装起来,用来暴露给Binding,造成冗余和语义上的不美观。其实,WPF类库里有一个名为ObjectDataProvider的类就是专门为了解决这个矛盾的— 阅读全文
posted @ 2013-05-24 12:03 三叶草╮ 阅读(694) 评论(0) 推荐(0)