接触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。

转载于:https://www.cnblogs.com/ouylvr0625/p/7267751.html

WPF-MVVM学习心德(WinForm转WPF心德)相关推荐

  1. 2021-12-12 WPF面试题 相对于Winform,WPF有什么优势?

    相对于Winform,WPF有什么优势? 1 - 绑定(更简约的编码) 2 - 灵活的外观和感受(资源和样式) 3 - 声明式编程 (XAML) 4 - 表现层混合动画(动画开发简单) 5 - 快速加 ...

  2. 基础tips:.NET和ASP.NET还有ASP到底是什么?客户端WinForm和WPF的区别?前端三大框架,webpack和vite的比较,android三大框架.

    1..NET和ASP.NET分别是什么? .NET是微软的一个开发平台,其主要核心就是.NET Framwork,这个平台的一大特点就是跨语言性,不管是什么语言,c.c++.c#.F#.J#.vb等语 ...

  3. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  4. WPF MVVM实例三

    在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...

  5. C# WPF MVVM 实战 – 3 – 树结构

    树结构放在 WPF ,有大家熟悉的 TreeView.Menu / MenuItem 等等,自定义的话它是 HierarchicalDataTemplate. 用上 MVVM 模式,视图与数据分离,意 ...

  6. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])...

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  7. WPF MVVM从入门到精通1:MVVM模式简介

    WPF MVVM从入门到精通1:MVVM模式简介 原文:WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录 ...

  8. Winform、WPF、Silverlight、MFC区别与联系

    WinForm 在Windows中,诸如窗体绘制等功能由GDI(图形设备接口)实现,放在操作系统内核中.Windows Forms在底层使用的是GDI+.GDI+是GDI的"面向对象包装&q ...

  9. Windows程序设计:MFC 、Winform 和 WPF 比较

    MFC生成本机代码,自然是很快,可是消息循环减缓了界面显示速度. WinForm封装了win32的api,多次进行P/invoke操作(大部分使用p/invoke操作封装),速度慢. WPF是一种新的 ...

  10. (WPF, MVVM) Event 处理

    原文:(WPF, MVVM) Event 处理 WPF的有些UI元素有Command属性可以直接实现绑定,如Button 但是很多Event的触发如何绑定到ViewModel中的Command呢? 答 ...

最新文章

  1. 查看LINUX进程内存占用情况
  2. union all动态表_Excel VBA——动态显示图表
  3. arm linux 中断优先级,ARM中断处理过程
  4. 正则至少一个数字_JavaScript学习笔记(十七)-- 正则
  5. 宣城市加快运用大数据推动全域旅游发展
  6. mysql查看数据库表大小语句_MySQL查看数据库表容量大小的命令语句讲解
  7. [Vue] : vue-resource 实现 get, post, jsonp请求
  8. npm 安装 git linux,如何直接从GitHub安装NPM软件包?
  9. 英伟达显卡gtx和gt的区别
  10. python 图像压缩 jpeg_smally:批量无损压缩JPG和PNG
  11. 从极客到 CEO,开发者应该如何提升技术领导力?
  12. python工具包--Pandas
  13. [转] 一些你不知道但是超美的地方,一定要去
  14. 奈奎斯特定理和香农定理
  15. Scrum敏捷开发实践之有道云笔记
  16. C++关于函数声明 函数实现
  17. ​力扣解法汇总764. 最大加号标志
  18. 抢茅台脚本居然用的Python,我们Python真是太强大了---图拉夫
  19. iconic 安装和使用
  20. Visual Effect Graph——块和操作符

热门文章

  1. ubuntu14.04下的NVIDIA Tesla K80显卡驱动的安装教程
  2. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
  3. 团队项目的分工及绩效评估方法
  4. 判断、转载-【Cocos2D-X 】初窥门径(8)判断精灵点击-by小雨
  5. HDU 1426(数独)
  6. html长文本自动换行
  7. Silverlight入门系列]使用MVVM模式
  8. [Flex]关于国内Flex开发者/从业者的调查问卷
  9. laravel 163发送邮件
  10. 使用深度V8.1 系统后打开部分文件夹缓慢