新的工作需要用到mvvm框架,这几天抽时间系统了解了一下,记录如下。

具体用到的可以是三个方面,(数据绑定,命令绑定,消息机制)

1.数据绑定

和wpf差不多,所有的viewmodel都继承ViewModelBase类,在里面的对象如果要可以绑定,都可以直接用this.RaisePropertyChanged完成即可。

2.命令绑定

在xaml中的事件命令,都可以在viewmodel层去具体实现。

如一个button的click事件

   <Button x:Name="btn1" Content="btn1" Command="{Binding Btn1ClickCommand}"  CommandParameter="{Binding SNotice}"  />

在viewmodel中,完成具体的事件

   private ICommand _Btn1ClickCommand = null;public ICommand Btn1ClickCommand{get { return _Btn1ClickCommand ?? new RelayCommand<SchoolNotice>(Btn1Click); }}private void Btn1Click(SchoolNotice schoolNotice){Console.WriteLine(schoolNotice.Msg);}

3.消息机制

这是我感觉比较好用的一点。之前如果不同窗体之前消息传递,需要用委托实现,这样耦合性就不好。如果用了消息机制,在某些情况下,耦合性会好很多。

消息用到主要是两部分,一个是不同窗体之前的消息传递(viewmodel和viewmodel之间传递) 另一个是 窗体的view和viewmodel之间传递,比如业务中会设计到界面的变化,这时给view层发送一个消息,让其去处理,而不要放在viewmodel中去处理界面的变化。

消息机制 分四块,1注册消息 2编写收到消息后,具体的业务逻辑 3发送消息 4反注册消息。

注册

          GalaSoft.MvvmLight.Messaging.Messenger.Default.Register<SchoolNotice>(this,GMessageType.btn1Type,Button1Click);

发送

    GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<SchoolNotice>(schoolNotice, GMessageType.btn1Type);

反注册

      this.Unloaded += (sender, e) => Messenger.Default.Unregister<SchoolNotice>(this,GMessageType.btn1Type,Button1Click);

具体的逻辑

 private void Button1Click(SchoolNotice schoolNotice){Console.WriteLine("Button1Click:"+schoolNotice.Msg);}

如果是viewmodel和viewmodel之前进行消息传递,一定要在view层去手动调用viewmodel的反注册消息(我还没找到别的方式自动释放,比较少用这种方式),否则即使响应窗体关闭,逻辑仍会处理,如果重新打开窗体,逻辑会因多次注册而被响应很多次。

代码点击打开链接

wpf mvvm学习笔记相关推荐

  1. WPF基础学习笔记(一)Dependency Object 和 Dependency Property

    .依赖属性是WPF个人觉得对精彩和最有特色的部分.所以特地先拿出来. 首先要实现Dependency Property 则必须要继承Dependency Object.如果看下WPF的基础控件其实都间 ...

  2. 《深入浅出WPF》学习笔记之深入浅出话属性

    依赖属性是一种可以从父级元素继承,并且可以通过Binding从数据源获取,当从父级继承时不占用内存的属性系统.拥有依赖属性的对象称为依赖对象.WPF允许在创建对象时并不分配用于存储数据的空间,而在需要 ...

  3. WPF-学习笔记 获取我的文档路径

    获取我的文档路径:Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 语句返回的是string值,但没有最后的 \ 档, ...

  4. 【HLSL学习笔记】WPF Shader Effect Library算法解读之[DirectionalBlur]

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[DirectionalBlur] 方位模糊是一个按照指定角度循环位移并叠加纹理,最后平均颜色值并输出的一种特效. ...

  5. Vue学习(MVVM、入门练习)-学习笔记

    文章目录 Vue学习(MVVM.入门练习)-学习笔记 入门实例 Vue学习(MVVM.入门练习)-学习笔记 入门实例 <!DOCTYPE html> <html> <he ...

  6. WPF学习笔记(数据绑定篇3)

    接上回的<WPF学习笔记(数据绑定篇2)>,继续 BindValidation 此示例演示了: 如何使用错误模板: 使用样式显示错误信息: 如何在校验发生异常时执行回调: 首先,你可以看见 ...

  7. WPF学习笔记(7):DataGrid中数字自定义格式显示

    WPF学习笔记(7):DataGrid中数字自定义格式显示 原文:WPF学习笔记(7):DataGrid中数字自定义格式显示 DataGrid中数据显示如下图,数据格式比较杂乱.希望达到以下要求:(1 ...

  8. knockout学习笔记目录

    关于knockout学习系列的文章已经写完,这里主要是做个总结,并且将目录罗列出来,方便查看.欢迎各位大神拍砖和讨论. 总结 kncokout是一个轻量级的UI类库,通过MVVM模式使前端的UI简单话 ...

  9. 狂神说 vue学习笔记

    vue学习笔记 文章目录 vue学习笔记 一.第一个vue程序 1. 什么是MVVM 2. 为什么要使用MVVM 3.直接新建项目 4.导入vue.js 5.简单绑定元素 6 vue的声明周期 二.V ...

最新文章

  1. ubuntu 能解析域名但ping不通_域名解析设置方法
  2. JS中fori和forEach跳出循环的问题
  3. boost::function_types::is_function_pointer用法的测试程序
  4. [置顶]信息发布系统 Jquery+MVC架构开发(7) Controller层
  5. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
  6. Java实现Huffman哈夫曼树
  7. 气味识别应用_解决气味
  8. 插入脚注把脚注标注删掉_地狱司机不应该只是英国电影历史数据中的脚注,这说明了为什么...
  9. latex 三线表_LaTeX学习记录(3):使用图表
  10. [Err] 22007 - [SQL Server]从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
  11. Java多线程(学习总结,持续更新)
  12. layui button按钮点击导致页面重新刷新的解决方案
  13. 【文文殿下】APIO2019游记
  14. 管理感悟:人才如何分级
  15. 30分钟学会正则表达式
  16. 用层次分析法解决购买笔记本电脑的问题
  17. -TEST 12 for NOIP ......(30-300)-----(( ! ))
  18. Window系统新手建站教程
  19. JavaWeb自学笔记(一)
  20. 【论文总结】Lip Reading Sentences in the Wild(唇语识别)

热门文章

  1. EMS、智慧能源管理、物联网、双碳、建筑用能、能耗统计、能源流向、损耗分析、考核分析、班组用能、水电数据、能耗分析、零碳园区、碳汇管理、工艺优化分析、用能诊断、计量仪表、用能预警、配电、供水、冷热源
  2. 手机开发平台的学习指南、教程和资料总结
  3. 看闸机中的“超能英雄”,如何带你智行天下
  4. 运算放大器芯片输出扩流电路三例
  5. 精品软件 推荐 QQ 电脑管家
  6. 5.Source Map
  7. 走了....我不是徐志摩,我不知道怎样轻轻的走....
  8. TBtools最新版(2023.2.10)
  9. 应用层、传输层、网络层常用协议
  10. 使用office 365管理和调度会议室