常用Wpf开发中我们在ViewModel中实现INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的;在MVVMLight框架里,这里我们定义的ViewModel都继承自ViewModelBase,ViewModelBase封装在MvvmLight框架中,它已经实现了INotifyPropertyChanged接口,因此我们在定义ViewModel属性时,只需要调用RaisePropertyChanged(PropertyName)就可以进行属性更改通知了。例如下代码:

       // DatePicker 选中日期
private DateTime _SelectedDate;
public DateTime SelectedDate
{
get
{
return _SelectedDate;
} set
{
if (_SelectedDate == value)
return; _SelectedDate = value; RaisePropertyChanged("SelectedDate");
}
}

事件是WPF/SL应用程序中UI与后台代码进行交互的最主要方式,与传统方式不同,mvvm中主要通过绑定到命令来进行事件的处理,因此要了解mvvm中处理事件的方式,就必须先熟悉命令的工作原理。

一、RelayCommand命令

WPF/SL命令是通过实现 ICommand 接口创建的。 ICommand 公开两个方法(ExecuteCanExecute)和一个事件(CanExecuteChanged)。 Execute 执行与命令关联的操作。CanExecute 确定是否可以在当前命令目标上执行命令。在MvvmLight中实现ICommand接口的类是RelayCommand,RelayCommand通过构造函数初始化ExecuteCanExecute方法,因此,构造函数传入的是委托类型的参数,ExecuteCanExecute则执行的是委托的方法,RelayCommand相关代码如下:

        public RelayCommand(Action execute, Func<bool> canExecute)
{
if (execute == null)
{
throw new ArgumentNullException("execute");
} _execute = execute;
_canExecute = canExecute;
} [DebuggerStepThrough]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute();
} public void Execute(object parameter)
{
_execute();
}

二、 Comand属性绑定

简单的例子:一个TextBox和一个Button,TextBox非空内容时候Button才可用,可用的Button点击后把TextBox内容show出来。

<Window x:Class="MVVMLightDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MVVMLightDemo.ViewModel"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowViewModel></local:MainWindowViewModel>
</Window.DataContext>
<Grid>
<StackPanel>
<TextBox Text="{Binding UserName, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Button Content="show" Command="{Binding ShowCommand}" CommandParameter="{Binding UserName}"></Button>
</StackPanel>
</Grid>
</Window>

ViewMode:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using System.Windows.Input;
using System.Windows;
namespace MVVMLightDemo.ViewModel
{
public class MainWindowViewModel:ViewModelBase
{
private string _UserName; public string UserName
{
get { return _UserName; }
set { _UserName = value; RaisePropertyChanged("UserName"); }
}
public ICommand ShowCommand
{
get
{
return new RelayCommand<string>(
(user) => {
MessageBox.Show(user);
}, (user) =>
{
return !string.IsNullOrEmpty(user);
}); }
}
}
}

MVVMlight框架应用:Data Binding、Command的更多相关文章

  1. MvvmLight框架的基本使用

    关于MvvmLight框架的介绍可以看这篇,说的很详细,在此记录下来以作复习,通过一个简单的例子说明MvvmLight的基本使用 https://www.cnblogs.com/3xiaolonglo ...

  2. MvvmLight框架使用入门(一)

    MvvmLight是比较流行的MVVM框架,相对较为简单易用.可能正因为简单,对应的帮助文档不多,对初学者就不够友好了.这里会用几篇随笔,就个人对MvvmLight的使用经验,来做一个入门的介绍. 第 ...

  3. MvvmLight框架使用入门(三)

    本篇是MvvmLight框架使用入门的第三篇.从本篇开始,所有代码将通过Windows 10的Universal App来演示.我们将创建一个Universal App并应用MvvmLight框架. ...

  4. MvvmLight框架使用入门(二)

    上一篇我们简单对MvvmLight做了介绍.罗列了三个DLL中,各个命名空间下主要类的定义及大致作用.因为只是范范的概论,对于从未接触过MvvmLight的萌新来说,根本就是在晃点他们.不过万事开头难 ...

  5. MVVMLight学习笔记(二)---MVVMLight框架初探

    一.MVVM分层概述 MVVM中,各个部分的职责如下: Model:负责数据实体的结构处理,与ViewModel进行交互: View:负责界面显示,与ViewModel进行数据和命令的交互: View ...

  6. Data Binding(数据绑定)用户指南

    1)介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- 它 ...

  7. 完全掌握Android Data Binding

    转载:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0603/2992.html 来源 https://github.com/L ...

  8. Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础

    原创声明: 该文章为原创文章,未经博主同意严禁转载. 前言: Android常用的架构有:MVC.MVP.MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecy ...

  9. android -------- Data Binding的使用(一)

    Google推出自己官方的数据绑定框架Data Binding Library 已经很久了,很多企业也在使用 面试的时候也有问到,所以也去学习了一番,特来分享一下,希望对各位有所帮助 描述: Data ...

随机推荐

  1. bzoj 1191: [HNOI2006]超级英雄Hero

    1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec  Memory Limit: 162 MB 二分图匹配... Description 现在电视台有一种节目叫做超 ...

  2. How Tomcat works — 六、tomcat处理请求

    tomcat已经启动完成了,那么是怎么处理请求的呢?怎么到了我们所写的servlet的呢? 目录 Http11ConnectionHandler Http11Processor CoyoteAdapt ...

  3. 澳洲最大的华资快递公司ACE 签约动软微信商城系统!

    ACE-平安立达快递是澳洲最大的华资快递公司ACE平安立达,总部设在Boxhill,同时在中国成立了进口食品专营连锁加盟店“澳莱优品”,目前已经有近20家加盟店,14年底国内计划开到60家店. 201 ...

  4. EnumHelper枚举常用操作类

    在项目中需要把枚举填充到下拉框中,所以使用统一的方法实现,测试代码如下: namespace CutPictureTest.Comm { public class EnumHelper { publi ...

  5. 開啟apache的日誌功能,但是不記錄.js;.css;.jpg;.ico;.png等訪問記錄

    維護web伺服器最重要的就是要每天都關注網站的訪問日誌,但是每天面對幾百兆的日誌文件實在是非常頭大,所以可以從根源上給日誌減肥一下,讓日誌只記錄對自己有用的內容就變得非常重了. Nginx伺服器要修改 ...

  6. .NET中的流

    当应用程序需要和磁盘上的文件打交道的时候,就有了流的概念.流就像架设在应用程序所在内存和磁盘之间的一个管道. 大致思路 → 建立管道 //FileMode.Open打开现有文件,另外还有FileMod ...

  7. 【转】IT 圈里有哪些经常被读错的词?

    以下内容转至知乎,原文:http://www.zhihu.com/question/19739907?__nids__=5363833,5358751,5355121,5365018,5363846, ...

  8. django关闭debug后,静态文件的处理

    Django框架仅在开发模式下提供静态文件服务.当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供 ...

  9. Redis常用命令汇总

    Redis HGET获取与字段中存储的键哈希相关联的值D:\web\JH2016\RedisV3.2\2MasterOpenAPI-15698\redis-cli.exe -h 127.0.0.1 - ...

  10. Lotus开发之Lotus Notes中域的验证

    一:介绍       Lotus中的域主要有以下的类型:文本,日期/时间,对话框列表,复选框,单选按钮,RTF等等.Lotus中域的验证方式有很多种公式,lotusscript,javascript等 ...