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 ...
随机推荐
- 文件参数化-utp框架之根据yaml文件自动生成python文件+utp运行用例
根据yaml文件自动生成python文件 utp框架: bin目录:存放执行文件(run.py) cases目录:存放生成的用例的python文件(该目录下的文件为根据data目录下的测试用例生成的p ...
- 类4(可变数据成员/基于const的重载)
可变数据成员: 有时我们希望能修改某个类的数据成员,即使是在一个 const 成员函数内.可以通过在变量的声明中加入 mutable 关键字来声明一个可变数据成员.mutable 是为突破 const ...
- PHP编码技巧
原则 正确实现功能 执行速度与快 占系统资源少 后期维护方便 编程注意 1.命名很重要 2.适当的使用注释 3.使用一个变量,需要初始化 4.优先使用单引号 $row['id']的效率是$row[id ...
- java集合类学习笔记之LinkList
1.简述 LinkList的底层其实就是一个双向链表,所谓的链表就是一个LinkList内部静态静态类(Node),对LinkList的所有操作本质上就是通过对LinkList中新建的Node对象 进 ...
- [HAOI2006]聪明的猴子 BZOJ 2429 Kruskal
#include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> #i ...
- js 三大家族之offset
JS中的offset家族: 一.offsetWidth与offsetHeight: 获取的是元素的实际宽高 = width + border + padding 注意点: 1.可以获取行内及内嵌的宽高 ...
- EA添加时序图
在项目浏览器的空白处右击 http://blog.csdn.net/craftsman1970/article/details/70877530 不同于大部分面向对象或者UML的书籍,在讨论完类图/对 ...
- Android RecyclerView组件和 Spinner(下拉列表框)
1.RecyclerView <1>知识点介绍 RecyclerView 比 ListView 更高级且更具灵活性. 它是一个用于显示庞大数据集的容器,可通过保持有限数量的视图进行非常有效 ...
- C++_函数4-函数重载与函数模板
函数重载 多个函数,函数名相同,但是调用的时候,参数不同. 函数多态是C++在C语言的基础上新增的功能.多态指的是有多种形式,因此函数多态允许函数可以有多种形式.术语“函数重载”指的是可以有多个同名的 ...
- LeetCode231.2的幂
231.2的幂 描述 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 示例 1: 输入: 1 输出: true 解释: 2^0 = 1 示例 2: 输入: 16 输出: true 解释 ...