知识预备 阅读本文,我假定你具备以下知识: C# WPF基础知识 知道WPF的命令 WPF相对WinForm加了一种Command的机制,对用户的操作进行更加灵活的处理,相信很多朋友知道并用过Routed Command,但这不是本文讨论的重点,本文主要讨论在MVVM模式中,用户输入与后台数据的交互所用的Command. ICommand接口 在WPF中,所有的命令都是基于ICommand接口的,ICommand的接口有三个成员 Execute 方法 这个方法,顾名思义,是在Command被触发…
最近学的一篇课文<说不尽的狗>竟让我有了写<说不尽的MVVM>这一想法,事非亵渎,实出无奈.我在刚学WPF不久时听说有MVVM这种东西,做了下尝试,发现他能给程序的设计带来很大的好处.好东西当然要分享给大家,下面,我们就来认识下MVVM. 预备知识 阅读本文,我假定你具备以下知识: C# 基础知识 XAML基础知识 对事件驱动模型的了解 听说过MVC.MVP.单元测试 MVVM是什么,好吃吗? MVVM全称为Model-View- View Model,是软件工程中的一种软件设计模…
原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Binding}”是行不通的 不能绑父级,但是能绑资源 第一步:定义一个中间类用来做资源对象 public class BindingProxy : Freezable { #region Overrides…
知识预备 阅读本文,我假定你已经具备以下知识: C#.WPF基础知识 了解Lambda表达式和TPL 对事件驱动模型的了解 知道ICommand接口 发生了什么 某程序员接到一个需求,编写一个媒体渲染器,效果如图,功能就是渲染媒体并在UI上面报告进度,看看他是怎么实现的. 事件驱动模型的实现 首先是界面 三个TextBlock分别负责显示状态.进度和百分号,还有一个按钮让用户启动渲染操作. 点击按钮时,异步调用Render方法. 在Render方法里面更新UI,模拟渲染操作,更新进度. 看起来不…
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? 从PRISM开始学WPF(五)MVVM(一)ViewModel? 从PRISM开始学WPF(六)MVVM(一)Command? 命令绑定(Command) 什么是Command? 先看下微软官方的说明: Commanding is an input mechanism in Windows Pres…
WPF内建的COMMAND是GOF 提出的23种设计模式中,命令模式的实现. 本文是WPF学习07:MVVM 预备知识之数据绑定的后续,将说明实现COMMAND的三个重点:ICommand  CommandManager InputBindings COMMAND简介 一般情况我们应用设计如下,一个个控件的各类Handler直接关心了如何实现具体的应用逻辑. 借助COMMAND,我们将具体实现的应用逻辑放在COMMAND中实现,控件只需要绑定相应的COMMAND,而无需关心应用逻辑,从而实现界面…
知识预备 阅读本文,我假定你具备以下知识: C#和WPF基础知识 Lambda表达式 清楚ViewModel的职责 如果我们的程序需要弹出一个MessageBox,我们应该怎么做? 我见过不少人在ViewModel里面写着:MessageBox.Show("xxx"); 程序的功能看似没有什么问题,日后我要把这个ViewModel用到WinRT上,你是不是傻眼了?WinRT是没有MessageBox的. 为什么会出现这样的情况呢?请仔细想想,弹出MessageBox是ViewModel…
上篇我们体验了一个从事件处理程序到MVVM程序的转变,在最后也留下了一个问题:RaisePropertyChanged的原理是什么?今天我们来一探究竟. 通过上节做的小例子我们知道,仅仅修改ViewModel的数据,UI是不会发生变化的,在数据的值被更改后,我们要通知UI,让UI重新来获取数据,这种具备通知能力的属性,就是我们今天的主角--通知属性. 知识预备 阅读本文,我假定你具备以下知识 C#.WPF 基础知识 .NET 反编译器的使用 能看懂基本的IL代码(可选) INotifyPrope…
WPF中不是所有的控件都有Command属性的,如果窗体我需要在ViewModel中处理Loaded事件命令,或者其他事件的命令时,很难都过绑定Command完成,必须要注册依赖属性或事件等,太麻烦了.我喜欢简约.有效的方式,现在我和大家一起分享一下. 场景,我需要处理Button的Click和MouseMove事件,但又避免用后置代码,尽量要在ViewModel中获取.单独一个Click可以通过Button的Command来完成,在前两篇文章中我已介绍过,现在就来处理MouseMove事件,这…
下面是“银光中国”(不错的WPF或SL网站)WPF学习教程中的一个连接, http://www.silverlightchina.net/html/study/WPF/2011/0715/9034.html…