WPF-MVVM学习心德(WinForm转WPF心德)
接触MVVM接近一段时间了,有一点理解,写下来。
之前是做winform的,工作需要,学习wpf。优缺点就不用说类,网上一大堆。我自己理解的话,有下面几点:
1、首先是界面的xmal和界面分离:wpf也同样支持拖拉控件,但是使用wpf的人,都觉得在xmal中写控件更屌一点。并且可以使用静态资源(Window。Resources)设置每一个控件的样式(Style),统一界面风格更方便。Style中的TargetType指定属于某一类控件,Setter指定属性(Property)和Value。
如 <Style x:key="TxtBoxStyle" TargetType=“TextBox”>
<Setter Property="Width" Value="100" />
</Style>
Style中还可以添加Template,然后放置更多的样式模板。
2、数据绑定,可以说是MVVM的核心。界面和后台的数据交互代码,统统放置在VM(ViewModel)中,M(Model)中放置数据对象,如SQL数据库中的订单表,在Modle中就是一个对象类。V(View)是界面层。
最近做了一个DataGrid的数据绑定,列中放置了TextBox、ComboBox、Button的控件,使用数据绑定驱动控件。

DataGrid的Columns中使用DataGridTemplateColumn,可以放置TextBox等控件。并在TextBox中添加TextBoxChanged事件,引用(xmlns:ie="http://schemas.microsoft.com/expression/2010/interactivity"),
<ie:Interaction.Trigger>
<ie:EvenTrigger EventName="TextChanged">
<ie:InvokeCommandAction Command="{Binding String,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" CommandParameter="String" />
</ie:Interaction.Trigger>
在Button中直接可以使用Command和CommandParameter,CommandParameter中可以使用ElementName传递任何控件到VM层。当然这样就违背了MVVM的设计初中,但是必要情况下,也可以这么用。如在选择了DataGrid的一行中的Button,如何取得Button所在行的其他列的信息呢?把DataGrid传过去就很方便了,直接使用SelectedItem。当然也可以在V层 .cs代码中获取后传递到VM层。
在DataGrid绑定数据时,指定ItemsSource=“{Binding xxx}“,VM层中使用ObservableCollection<xxxModel> 集合,并设置OnPropertyChanged。DataGrid列中Binding对象xxModel中的属性就可以了。
如此就可以在DataGrid中显示数据。有时候这样Binding后还是不能显示数据,可能是Binding数据对象需要静态什么的。如ComboBox中绑定,这个我是设定类ComboBox类,其中有Value和Text及Guid属性,并在xxxModle(DataGrid数据源对象中)定义集合,并在集合中添加值。并且Binding时这样写(别问为为什么,也是在网上找到代码):”{Binding xxxModel.xxxCbBox},RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}“。
Button的Visibility属性同样可以做Banding。
WPF-MVVM学习心德(WinForm转WPF心德)的更多相关文章
- WinForm、wpf、silverlight三者关系
最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分.但是我目前对于.NET的WinForm.wpf.silverlight这三者的关系弄的不是很清楚,一般书中很少介绍wpf和 ...
- 转载:WPF MVVM之INotifyPropertyChanged接口的几种实现方式
原文地址:http://www.cnblogs.com/xiwang/ 序言 借助WPF/Sliverlight强大的数据绑定功能,可以比实现比MFC,WinForm更加优雅轻松的数据绑定.但是在使用 ...
- 我去年码了个表(WPF MvvM)
又快个把月没写博客了(最近忙着学JAVA去了,都是被逼的/(ㄒoㄒ)/~~),然后用WPF码了个表,其实想加上那种提醒功能什么的,额,就这样了吧,主要是感受一下数据驱动的思想. 效果如下: 前端XAM ...
- 【Win32 API】利用SendMessage实现winform与wpf之间的消息传递
原文:[Win32 API]利用SendMessage实现winform与wpf之间的消息传递 引言 有一次心血来潮,突然想研究一下进程间的通信,能够实现消息传递的方法有几种,其中win32ap ...
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...
- winform和WPF的那点事~
一.定义 1.Winform的定义: WinForm是·Net开发平台中对Windows Form的一种称谓. 2.WPF的定义: WPF(Windows Presentation Foundatio ...
- WPF MVVM之INotifyPropertyChanged接口的几种实现方式(转)
原地址:https://www.cnblogs.com/xiwang/archive/2012/11/25/2787358.html 序言 借助WPF/Sliverlight强大的数据绑定功能,可以比 ...
- WPF MVVM实例三
在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- WPF MVVM 验证
WPF MVVM(Caliburn.Micro) 数据验证 书接前文 前文中仅是WPF验证中的一种,我们暂且称之为View端的验证(因为其验证规是写在Xaml文件中的). 还有一种我们称之为Model ...
随机推荐
- spring 学习(四): spring 的 jdbcTemplate 操作
spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...
- [Swift]八大排序算法(五):插入排序
排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...
- Python操作hdfs
Python直接操作hdfs,包括追加数据文件到hdfs文件 #!coding:utf-8 import sys from hdfs.client import Client #设置utf-8模式 r ...
- Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学
1. 介绍 Avatar Mask(动画融合) 前面我们一直介绍的都是动画混合,一般用于解决边跑边转弯的问题.而动画融合一般用于解决例如边跑边挥手的问题. 简单说就是让跑步去控制腿的骨骼,挥手控制手的 ...
- 5、用Numpy实现结构体
1.结构数组: 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组.和C语言一样,在NumPy中也很容易 ...
- flask总结05(在 Flask 项目中解决 CSRF 攻击)
一:安装 flask_wtf pip install flask_wtf 二:设置应用程序的 secret_key,用于加密生成的 csrf_token 的值 # session加密的时候已经配置过了 ...
- HDU6395(分段+矩阵快速幂)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6395 给你一个式子,给出你A,B,C,D,P,n,让你求出第n项的式子Fn.(其中ABCDPn均在1e9的 ...
- archlinux升级firefox的flash插件
参考:http://blog.csdn.net/kingolie/article/details/53066415 1. 在https://get.adobe.com/flashplayer/下载文件 ...
- Yii1 的数据库操作整理
1.根据条件查询一个集合 $objectResult=Post::model()->findAll($condition,$params);$objectResult=Post::model() ...
- TT 安装前配置 共享内存,在页,信号量
以下各节描述的步骤在Linux系统上安装的TimesTen之前执行: 共享内存(Linux的):PermSize + TempSize + LogBufMB + 64 MB # vi /etc/sys ...