MVVM Light框架点滴(MVVM模式)

MVVM Light框架是针对WPF和silverlight开发提供的一个MVVM模式的实现,以下简要总结一下该框架。

[以下基于Silverlights4]

MVVM Light组成

目前的框架就两个库文件

GalaSoft.MvvmLight库

ViewModelBase:View Model的基础类,MVVM中VM实现

Messenger:用于ViewModel和View之间传递的消息,注意系统的GalaSoft.MvvmLight.Messaging命名空间下已经预定义了一些常使用的消息处理类,
如DialogMessage、NotificationMessageAction、NotificationMessageWithCallback等

Command:命令,RelayCommand,用语和界面元素的响应处理绑定

GalaSoft.MvvmLight.Extras库

EventToCommand:使用XAML 绑定Command,Expression4中使用

DispatcherHelper:处理多线程

MVVM Light安装和使用

GalaSoft.MvvmLight.Binaries.V3.zip

解压到系统的Program files目录

GalaSoft.MvvmLight.Templates.V3.VS10.zip

将其中的ItemTemplates ProjectTemplates下的Silverlight内容拷贝到对应的

C:\Users\Administrator\Documents\Visual Studio 2010\Templates下

此时New Project是可以选择Silverlight下的MVVM light模板,不过这个模板也是比较简单的

一般项目使用方法:

1、 添加GalaSoft.MvvmLight.SL4.dll GalaSoft.MvvmLight.Extras.SL4.dll引用

2、 在App.xaml中加入ViewModelLocator, 当然如何使用代码或则MEF实现View和ViewModel之间的绑定,这个也不需要

xmlns:vm="clr-namespace:MvvmLight1.ViewModel"

<vm:ViewModelLocator x:Key="Locator d:IsDataSource="True" />

3、 添加ViewModel、View

此时:

ViewModel中:加入Command实现、发送消息和View 传递信息

View中:       绑定数据、绑定Command、注册消息、ICleanup实现ViewModel清理注册消息清理、界面和交互设计
 
至于View和ViewModel之间的初始化关联可以使用ViewModelLocator.cs的形式建立和绑定【这个形式还是有些麻烦】,当然也可以使用MEF等IOC实现自动注入

View中绑定ViewModel可以使用

DataContext="{Binding Main, Source={StaticResource Locator}}",也可以使用代码实现绑定[此处的Locator就是在App.xaml声明的]

MVVM Light实例


消息注册


一般在View中注册以响应ViewModel中消息,当然也可以在别处注册

 Messenger.Default.Register(this, OnReadOnlyIssueMessage);
Messenger.Default.Register<Brush>(this, true, m => BackgroundBrush = m);

消息发送

Messenger.Default.Send(new CommandMessage(Notifications.NotifyShutdown));
Messenger.Default.Send<Brush, MainViewModel>(savedSettings.ApplicationBackgroundBrush);

Command定义

        public RelayCommand ShutdownCommand
        {
            get;
            private set;
        }
  public MainViewModel()
        {
            if (IsInDesignMode)
            {
               
            }
            else
            {
               
                ShutdownCommand = new RelayCommand(ShutdownService.RequestShutdown);
            }
        }
RemoveFileCommand = new RelayCommand<Data.Web.File>(g => this.OnRemoveFileCommand(g), g => g != null);

Command绑定

   <Button  Content="Shut" Command="{Binding Path= ShutdownCommand }" />
 
       Command="{Binding Path=RemoveFileCommand}"
       CommandParameter="{Binding SelectedItem, ElementName=listBox_Files}" 
 

ICLeanup

MEF

   public partial class AllIssues : UserControl, ICleanup
    {
        public AllIssues()
        {
            InitializeComponent();
            if (!ViewModelBase.IsInDesignModeStatic)
            {
                // Use MEF To load the View Model
                CompositionInitializer.SatisfyImports(this);
            }
        }
 
        [Import(ViewModelTypes.AllIssuesViewModel)]
        public object ViewModel
        {
            set
            {
                DataContext = value;
            }
        }
   
public void Cleanup()
        {
            // call Cleanup on its ViewModel
            ((ICleanup)this.DataContext).Cleanup();
            // call Cleanup on IssueEditor
            this.issueEditor.Cleanup();
            // Cleanup itself
            Messenger.Default.Unregister(this);
        }
 

DispatcherHelper

源代码中GalaSoft.MvvmLight.Test (SL).csproj 
TestDispatcherHelper.cs有详细内容

ViewModel

从ViewModelBase继承实现视图对应的类



时间: 2024-09-16 05:44:08

MVVM Light框架点滴(MVVM模式)的相关文章

Silverlight实用窍门系列:52.Silverlight中的MVVM框架极速入门(以MVVM Light Toolkit为例)

 在本文将以MVVM Light Toolkit为例讲解MVVM框架在现实中的使用入门,首先我们在http://mvvmlight.codeplex.com/下载它的MVVM框架下来.也可以通过 http://files.cnblogs.com/chengxingliang/GalaSoft.MvvmLight.V3.rar 下载MVVM Light Toolkit.然后我们安装这个安装包,然后重新打开VS2010,新建一个项目,如下图所示:    Tip:MVVM分为Model.ViewMod

Android MVVM 应用框架构建过程详解

概述 说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架.然而两者的概念是不一样的,不能混为一谈.MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具. 之前看过很多关于Android MVVM的博客,但大多数提到的都是DataBinding的基本用法,很少有文章仔细讲解在Android中是如何通过DataBinding去构建MVVM的应用框架的.View.ViewModel.Model每

移动开发每周阅读清单:iOS多线程安全、构建Android MVVM应用框架

(我进去瞅了一眼又退出了.) 『移动开发每周阅读清单』第三十七期与大家见面了,上周支付宝来抢头条了,我想事情变成这样不是他们的本意,只能说产品经理还是很重要啊. 提示:点击文末阅读原文可打开带链接的版本. 提示2:文末有小福利~ 新闻 Apple 停止了 AirPort 产品线开发 根据彭博社报道,Apple 已经停止包括 AirPort Express.AirPort Extreme 等无线路由产品的开发.Apple 希望可以将人手用在带来收益更高的下一代苹果产品中.不过并不清楚苹果会在什么时

从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构)

 文章转载自: http://blog.csdn.net/v_july_v/article/details/670407 从hadoop框架与MapReduce模式中谈海量数据处理 前言     几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理.     由此,最近凡是空闲时

jeasyui-找前端UI高手修改ACE-admin 框架为iframe模式

问题描述 找前端UI高手修改ACE-admin 框架为iframe模式 本公司在使用ACE-Admin 作为软件后台界面框架,但原框架是每次刷新页面的不很好适应我们需求. 现想参考JeasyUI框架的模式,把ACE-admin改一下,使其支持iframe方式 . 有这方面的高手可以认真查看附件中的要求,然后联系我们, 费用不是问题,只要能达到要求.http://test1.swkj.it/ace/ui_ace_admin42208006.rar QQ42208006

Mvvm Light Toolkit for wpf/silverlight系列之Command和Events

转自http://blog.csdn.net/duanzilin/article/details/6399640 事件是WPF/SL应用程序中UI与后台代码进行交互的最主要方式,与传统方式不同,mvvm中主要通过绑定到命令来进行事件的处理,因此要了解mvvm中处理事件的方式,就必须先熟悉命令的工作原理.    一.RelayCommand命令 WPF/SL命令是通过实现 ICommand 接口创建的. ICommand 公开两个方法(Execute 及 CanExecute)和一个事件(CanE

MVVM模式的几个开源框架

实现MVVM的框架有很多,如: • MVVM Light Toolkit: http://mvvmlight.codeplex.com • Microsoft Prism http://compositewpf.codeplex.com/ • Calcium SDK http://calciumsdk.net/ • Caliburn http://caliburn.codeplex.com/ •Caliburn  Micro http://caliburnmicro.codeplex.com/

.NET的MVVM框架

转自 http://www.infoq.com/cn/news/2011/12/mvvm-frameworks-net 作者 Roopesh Shenoy 译者 李永伦 发布于 2011年12月15日 Model-View-ViewModel是 一种架构模式,主要在WPF.Silverlight和WP7开发里使用,它的目标是从视图层移除几乎所有代码隐藏(code-behind).交互设计 师可以专注于使用XAML表达用户体验需求,然后创建和视图模型的绑定,而视图模型则是由应用程序开发者开发和维护

重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式

原文:重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式 [源码下载] 重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 绑定 通过 MVVM 模式实现数据的添加.删除.修改和查询 示例1.Model 层Binding/MVVM/Model/ProductDatabase.cs /* * Model 层的数据持久化操作(本地或远程) *