简易的WPF MVVM模式开发
- Model层
public class Song
{
private string _artistName;
private string _songTitle; public string SongTitle
{
get { return _songTitle; }
set { _songTitle = value; }
} public string ArtistName
{
get { return _artistName; }
set { _artistName = value; }
} }
- ViewModel
RelayCommand
public class RelayCommand : ICommand
{ private readonly Func<Boolean> _canExecute; private readonly Action<object> _execute; public RelayCommand(Action<object> execute)
: this(execute, null)
{ } public RelayCommand(Action<object> execute, Func<bool> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute is null");
_canExecute = canExecute;
_execute = execute;
} public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute();
} public event EventHandler CanExecuteChanged
{
add
{
if (_canExecute != null)
{
CommandManager.RequerySuggested += value;
}
}
remove
{
if (_canExecute != null)
{
CommandManager.RequerySuggested -= value;
}
}
} public void Execute(object parameter)
{
_execute(parameter);
}
}
public sealed class SongVM : INotifyPropertyChanged
{
private Song _song; public SongVM()
{
_song = new Song() { SongTitle = "叮叮当", ArtistName = "wjp" };
} public Song Song
{
get { return _song; }
set
{
_song = value;
}
} public string ArtistName
{
get { return Song.ArtistName; }
set
{
if (ArtistName != value)
{
Song.ArtistName = value;
RaisePropertyChanged("ArtistName");
}
}
} public string SongTitle
{
get { return Song.SongTitle; }
set
{
if (SongTitle!=value)
{
Song.SongTitle = value;
RaisePropertyChanged("SongTitle");
}
}
} public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
} private void Execute(object para)
{
if (para != null)
ArtistName = para.ToString();
} private bool CanExeCute()
{
return true;
} public ICommand UpdateAtistName
{
get
{
return new RelayCommand(Execute, CanExeCute);
}
}
}
- View
<Window x:Class="MVVMLightDemo.View.SampleMVVM"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:localVM="clr-namespace:MVVMLightDemo.ViewModel"
Title="SampleMVVM" Height="" Width="">
<Window.DataContext>
<localVM:SongVM/>
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="" Grid.Row="" Text="姓名" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Column="" Grid.Row="" Text="歌曲名称" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Column="" Grid.Row="" Text="{Binding ArtistName}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Column="" Grid.Row="" Text="{Binding Song.SongTitle}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Grid.Column="" Grid.ColumnSpan="" Grid.Row="" Margin="" Content="更新姓名" Command="{Binding UpdateAtistName}" CommandParameter="王俊鹏"/>
</Grid>
</Window>
简易的WPF MVVM模式开发的更多相关文章
- WPF MVVM模式的一些理解
/*本文转自 http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html */ 使用WPF+Mvvm开发一年多,期间由于对Mvvm模 ...
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...
- WPF MVVM模式中,通过命令实现窗体拖动、跳转以及显隐控制
原文:WPF MVVM模式中,通过命令实现窗体拖动.跳转以及显隐控制 在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到 ...
- 用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件
原文:用MVVM模式开发中遇到的零散问题总结(4)--自制摄像头拍摄大头贴控件 一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种Code ...
- 用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机
原文:用MVVM模式开发中遇到的零散问题总结(5)--将动态加载的可视元素保存为图片的控件,Binding刷新的时机 在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打 ...
- wpf mvvm模式下CommandParameter传递多参
原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递多参数,就要稍微处理一下.我暂时还没找到更好的方案,下面介绍的这 ...
- 用MVVM模式开发中遇到的零散问题总结(2)
原文:用MVVM模式开发中遇到的零散问题总结(2) 本节目录: 1.解决动画属性被劫持问题 2.设置页面焦点默认所在对象 3.XAML模拟键盘按键 4.DataGrid数据源绑定到复杂格式(dynam ...
- 用MVVM模式开发中遇到的零散问题总结(3)——自制正则表达式万能绑定转换器
原文:用MVVM模式开发中遇到的零散问题总结(3)--自制正则表达式万能绑定转换器 前言 最近接受了3个项目的洗礼,出差近3个月,各种北京.广州.昆明来回奔波,好久没写博客了,之前我觉得我遇到的问题都 ...
- C# WPF开发之MVVM模式开发
MVVM模式由Model,View,ViewModel三部分组成. Model需继承INotifyPropertyChange(属性修改通知) ViewModel负责业务逻辑,连接View和Model ...
随机推荐
- 翻译Oracle文档--SYSDBA和SYSOPER系统权限
SYSDBA和SYSOPER是管理权限,被用户来执行高级管理操作例如:创建 开启/关闭 备份/恢复 数据库.SYSDBA系统权限是针对想给予完全授权的数据库管理员SYSOPER系统权限允许一个用户执行 ...
- SpringMVC整合极光推送报错ClassNotFound
问题: 今天在做后台和极光整合的过程中,将极光部分代码整合到Dao层,在启动项目的过程中总是报错,classNotFund cn/jpush/api/push/xxxx 极光官方文档: http:// ...
- Qt5.3企业版和开源版功能区别
一: Charts Charts是QT提供的图表模块.他提供了非常简便的APIs来绘制令人惊叹的Line, Spline,Area,Scatter,Pie,Donut,Bar,Polar和Box-an ...
- mybatis和ibatis区别
ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis. 1.Mybat ...
- Tomcat部署项目通过—IP地址:端口访问
如题所示,实现效果图如下: 设置如下: (1)修改${tomcat}/config/sever.xml文件虚拟内容目录: <Engine name="Catalina" de ...
- yumdebug
- c、c++知识点
一. (1)在linux下类似uint8_t这样的文件定义在头文件<stdint.h>里面 (2)截取了stdint.h头文件里的一些常用部分 二.c++中c_str()用法 函数返回 ...
- poj 3262 Protecting the Flowers 贪心
题意:给定n个奶牛,FJ把奶牛i从其位置送回牛棚并回到草坪要花费2*t[i]时间,同时留在草地上的奶牛j每分钟会消耗d[j]个草 求把所有奶牛送回牛棚内,所消耗草的最小值 思路:贪心,假设奶牛a和奶牛 ...
- pyqt显示指定范围的数字
# -*- coding: cp936 -*- # -*- coding: cp936 -*- import sys from PyQt4 import QtCore, QtGui #导入模块 a ...
- map的类型映射
以下是使用STL中map类型,对类型的转换示例,主要可以解决的问题,也就是一般的类型之间的相互转换,可以较好的解决相关的问题. 以下是C++源码,比较简短,容易理解的. #include " ...