浅尝MVVMLight…

2023-10-30

    最近要写WPF技术的项目,所以要学习一下关于WPF的知识…今天呢了解了一下MVVM的知识,具体内容如下了…

    MVVM呢是Model-View-ViewModel的缩写了…MVVM的由来算是有MVP(Model-View-Presenter)模式与WPF的结合新型架构框架了,它立足于原有MVP框架并且把WPF的新特性揉合进去,以应对客户日益复杂的需求变化…

    MVVMLight呢算是MVVM他是MVVM的一种实现,当然还有其他的其它的实现了(例如微软的Prism),但现在MVVMLight是一个公认的比较好的一种实现了…

    下面介绍一下MVVMLight的安装方法了…

    我比较喜欢从Visual Studio中的NuGet Package中来获取MVVMLight了,如果想安装MVVMLight Toolkit请自行度娘或谷姐…

    首先呢从Visaul Studio中的工具菜单项打开 扩展管理器,然后再搜索栏中输入 NuGet Package进行搜索…

    image

    然后安装NuGet Package,如果已经安装过的可以直接跳过进行下一步了…NuGet Package不是必须安装的了,也可以直接安装MVVMLight了,但是安装了NuGet Package以后,它可以使你的MVVMLight保持到最新版本了,当有更新的时候呢会自动有更新提示了…推荐使用了…

    安装完NuGet Package后,然后再在 解决方案 右键选择 管理NuGet程序包 中搜索MVVMLight进行安装…至此MVMMLight就安装完成了…以后如果那个项目需要使用MVVMLight库就只要在 管理NuGet程序包中进行一次MVVMLight安装就可以了…

    image

    下面写段代码使用一下MVVMLight了…

     建立项目MVVMLightTest…然后在项目中添加类Song,类中代码如下…

   1:  /// <summary>
   2:      /// Model of a 'song'.
   3:      /// </summary>
   4:      public class Song
   5:      {
   6:          #region Members
   7:          string _artistName;
   8:          string _songTitle;
   9:          #endregion
  10:   
  11:          #region Properties
  12:          /// <summary>
  13:          /// The artist name.
  14:          /// </summary>
  15:          public string ArtistName
  16:          {
  17:              get { return _artistName; }
  18:              set { _artistName = value; }
  19:          }
  20:   
  21:          /// <summary>
  22:          /// The song title.
  23:          /// </summary>
  24:          public string SongTitle
  25:          {
  26:              get { return _songTitle; }
  27:              set { _songTitle = value; }
  28:          }
  29:          #endregion
  30:      }

         然后再添加类SongViewModel,类中代码如下…

        

     1:      /// <summary>
     2:      /// This class is a view model of a song.
     3:      /// </summary>
     4:      public class SongViewModel:ObservableObject
     5:      {
     6:          #region Construction
     7:          /// <summary>
     8:          /// Constructs the default instance of a SongViewModel
     9:          /// </summary>
     10:          public SongViewModel()
     11:          {
     12:              _song = new Song { ArtistName = "Unknown", SongTitle = "Unknown" };
     13:          }
     14:          #endregion
     15:   
     16:          #region Members
     17:          Song _song;
     18:          int _count = 0;
     19:          #endregion
     20:   
     21:          #region Properties
     22:          public Song Song
     23:          {
     24:              get
     25:              {
     26:                  return _song;
     27:              }
     28:              set
     29:              {
     30:                  _song = value;
     31:              }
     32:          }
     33:   
     34:          public string ArtistName
     35:          {
     36:              get { return Song.ArtistName; }
     37:              set
     38:              {
     39:                  if (Song.ArtistName != value)
     40:                  {
     41:                      this.Song.ArtistName = value;
     42:                      RaisePropertyChanged("ArtistName");
     43:                  }
     44:              }
     45:          } 
     46:          #endregion
     47:   
     48:          #region Commands
     49:          void UpdateArtistNameExexute()
     50:          {
     51:              ++_count;
     52:              ArtistName = string.Format("Elvis ({0})", _count);
     53:          }
     54:          bool CanUpdateArtistNameExecute()
     55:          {
     56:              return true;
     57:          }
     58:          public ICommand UpdateArtistName
     59:          {
     60:              get
     61:              {
     62:                  return new RelayCommand(UpdateArtistNameExexute, CanUpdateArtistNameExecute);
     63:              }
     64:          }
     65:          #endregion
     66:      }

    然后再MainWindow.xaml中添加以下代码…

       1:   <Window.DataContext>
       2:          <!-- Declaratively create an instance of our SongViewModel -->
       3:          <local:SongViewModel />
       4:      </Window.DataContext>
       5:      <Grid>
       6:          <Grid.RowDefinitions>
       7:              <RowDefinition Height="Auto" />
       8:              <RowDefinition Height="Auto" />
       9:              <RowDefinition Height="Auto" />
     10:          </Grid.RowDefinitions>
     11:          <Grid.ColumnDefinitions>
     12:              <ColumnDefinition Width="Auto" />
     13:              <ColumnDefinition Width="Auto" />
     14:          </Grid.ColumnDefinitions>
     15:          <Label Grid.Column="0" Grid.Row="0" Content="Example 1 - this doesn't work!" />
     16:          <Label Grid.Column="0" Grid.Row="1" Content="Artist:  " />
     17:          <Label Grid.Column="1" Grid.Row="1" Content="{Binding ArtistName, Mode=TwoWay}" />
     18:          <Button Grid.Column="1" Grid.Row="2" Name="ButtonUpdateArtist" Content="Update Artist Name" Command="{Binding UpdateArtistName}"/>
      19:      </Grid>

    然后生成并运行程序…效果如下

    image image image

    此程序虽然功能狠狠简单,但是它却体现出了MVVM的思想…程序中的所有业务逻辑放在了ViewModel中,在MainWindow的.cs文件中未添加任何代码…只需在MainWindow.xaml中进行数据和命令的绑定即可…

转载于:https://www.cnblogs.com/kordkuo/archive/2012/08/13/2636693.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅尝MVVMLight… 的相关文章

  • qedl中的fixDepth()简化

    如果将PerspectiveMode的设置为1 则会传递zNear和Zfar 在fixDepth 中 而将perspectiveMode 0 则大大简化fixDepth float fixDepth float depth return c
  • 贷款预测问题(探索性分析+多种解决方案)

    用到的数据集 train 链接 https pan baidu com s 1hCQKvLYxTb5MkltJDa1QlQ 提取码 jsh8 test 链接 https pan baidu com s 16SkJ7fo1yEutv4CwnW
  • 工厂方法(Factory Method):对象创建型模式

    文章目录 1 代码示例 2 工厂方法模式的定义 实现意图 1 代码示例 工厂方法模式 简称工厂模式或者多态工厂模式 与简单工厂模式相比 引入了更多的新类 灵活性更强 实现也更加复杂 符合开闭原则 付出的代价是需要新增加多个新的工厂类 如下
  • linux 卸载iscsi,iscsi挂载和删除

    iscsi挂载和删除 2011 01 01 11 54 01 分类 存储 字号 iscsi操作 http blog csdn net do2jiang archive 2009 12 29 5097730 aspx trune2fs c l
  • Python学习之:如何根据经纬度来实现地图的可视化(将这些点在地图上标注出来)

    文章目录 最终效果展示 实操步骤 第一步 打开高德地图的控制台 gt 数据可视化 第二步 创建可视化项目 第三步 上传CSV数据 注意格式要求 一定要包含经纬度信息 第四步 创建可视化实例 最终效果展示 这些红色的点 就是我们给出的经纬度的
  • javascript实现回到顶部按钮特效

    有时由于页面内容过多 每次回到顶部比较麻烦 所以记录一下JavaScript实现回到顶部按钮特效的代码 便于以后备用 css代码 实现回到顶部按钮特效 box position fixed right 10px bottom 10px he
  • Hadoop伪分布模式配置

    Hadoop共有三种部署方式 本地模式 伪分布模式及集群模式 本次安装配置以伪分布模式为主 即在一台服务器上运行Hadoop 如果是分布式模式 则首先要配置Master主节点 其次配置Slave从节点 以下说明如无特殊说明 默认使用root
  • QT多窗口

    常用的窗体基类是 QWidget QDialog 和 QMainWindow 在创建 GUI 应用程序时选择窗体基类就是从这 3 个类中选择 QWidget 直接继承于 QObject 是 QDialog 和 QMainWindow 的父类
  • 在学习Python时遇到的一些项目bug

    启动线程 开启任务时 1 出现错误TypeError init got an unexpected keyword argument arg ok python没有能解析出来这个参数 好吧少写了个s 加上就没啥问题了 2 出现错误TypeE
  • 丑数打表 & 计算 (自用)

    丑数定义 只包含因子2 3 5的正整数被称作丑数 define min a b a lt b a b define min4 a b c d min min a b min c d int choushu 5850 int main int
  • 代理模型:最小二乘支持向量回归(LSSVR)--- MATLAB程序

    写在开头 代理模型是工程问题中常用的一个优化方法 当实际问题计算量很大 不容易求解时 可以使用计算量较小 求解迅速的简化模型来替代原模型 加速优化过程 代理模型采用一个数据驱动的 自下而上的办法来建立 首先 通过抽样得到有限个样本点 输入
  • java烟花代码_一个美丽的java烟花程序

    import java awt import java applet import java awt event import javax swing public class ChatApplet extends Applet imple
  • Shell 从入门到精通(二)

    变量的赋值方式 定义或引用变量时注意事项 双引号是弱引用 单引号是强引用 即单引号是所见即所得 双引号是进行了赋值操作 两个反引号等价于 反引号的中的shell命令会被先执行 变量数值运算 1 整数运算 expr 五颗星 2 整数运算 四颗
  • Spring源码解析4.createBean()方法解析

    createBeanInstance protected BeanWrapper createBeanInstance String beanName RootBeanDefinition mbd Nullable Object args
  • ​LeetCode刷题实战336:回文对

    算法的重要性 我就不多说了吧 想去大厂 就必须要经过基础知识和业务逻辑面试 算法面试 所以 为了提高大家的算法能力 这个公众号后续每天带大家做一道算法题 题目就从LeetCode上面选 今天和大家聊的问题叫做 回文对 我们先来看题面 htt
  • 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析

    1 CAN总线的基本概念以及由来 CAN Controller Area Network 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 它起初用于实现汽车内ECU之间可靠的通信 后因其简单实用可靠等特点 而广泛应用于工
  • 解读HashMap中put方法的源码

    解析hashMap的put方法是如何存储一个键值 一 put方法 代码1 1 V put K key V value 方法 public V put K key V value return putVal hash key key valu
  • Java 面向对象之多态

    目录 1 接口 1 1 接口中成员的访问特点 1 2 默认方法 1 3 静态方法 1 4 私有方法 1 5 小结 2 多态 2 1 多态中成员的访问特点 2 2 多态的好处和弊端 2 3 多态中的转型 3 内部类 3 1 成员内部类 3 2
  • SpringBoot框架总结

    SpringBoot框架总结 一 SpringBoot框架的概念 1 传统框架的弊端 例如传统的SSM框架整合了MyBatis Spring SpringMVC框架 但其需要繁琐且重复的配置使程序员很是痛苦 2 SpringBoot框架 S
  • ros中编译release版本

    catkin build cmake args DCMAKE BUILD TYPE Release

随机推荐

  • Java做一个进制转换小工具

    通过swing和awt实现的一个简单的进制转换工具 可以进行数之间的进制转换 只有两个类 所有代码都放在https github com 13337356453 BHD Converter 可自行下载 因为某些特殊的原因 没有把窗口弄得更漂
  • Selenium中的断言(python篇)

    Selenium常用的断言包括 页面属性断言 断言标题 url或页面源码中是否包含或不包含特定字符 元素存在断言 断言指定元素存在 图片及链接断言 断言图片正常显示 链接可以正常打开 页面属性断言 这是最常用的断言方式 可以用来断言页面是否
  • 李开复创业--创新工场未来的前景是怎样?

    创新工场现在是房子不小 人不多 这个星期我们招聘了第七个人 节目还没开始 李开复对本报道如是说 十一 长假 他赶赴美国与投资商谈融资 同时不忘到两所知名高校演讲招揽人才 现在 刚刚满月的 创新工场 未来的前景是怎样 招聘人才一个月 招揽人才
  • 面试题10道02 2021.11.26

    1 什么是HTTP报文 Http报文就是客户端和服务端之间传送的数据块 2 HTTP报文由哪三部分组成 HTTP报文由起始行 头部 主体组成 其中起始行是对该报文进行的描述 头部是对报文的属性进行的描述 主体则是数据的内容 3 HTTP报文
  • Movidius神经计算棒5-编译ncsdk

    上面是我的微信和QQ群 欢迎新朋友的加入 这里有个小提示 先把硬件接上电脑 否则会编译报错 然后最好不要用USB HUB线 make install 完成之后如下所示 make examples 完成之后是这样的 测试
  • 希尔排序详解

    1 概述 希尔排序 Shell s Sort 是插入排序的一种又称 缩小增量排序 Diminishing Increment Sort 是直接插入排序算法的一种更高效的改进版本 希尔排序是非稳定排序算法 该方法因 D L Shell 于 1
  • scrapy中关于Splash的使用

    为什么要学习Splash 我们经常使用scrapy框架编写爬虫代码 站在巨人的肩膀上感觉很好 但是一旦遇到网站用JavaScript动态渲染 scrapy就显得有些力不从心了 我们了解的selenium可以完成动态加载 返回浏览器渲染后的页
  • python字符串长度输出_python输出指定长度的字符串

    import io import sys import random import string def generate random str randomlength 16 生成一个指定长度的随机字符串 其中 string digits
  • 基本数据类型对象包装类

    基本数据类型对象包装类 为了方便操作基本数据类型值 将其封装成了对象 在对象中定义了属性和行为丰富了该数据的操作 用于描述该对象的类就称为基本数据类型包装类 byte Byte short Short int Integer long Lo
  • IDEA自带plantUML绘制时序图

    一 时序图的作用 时序图 Sequence Diagram 又名序列图 循序图 是一种UML交互图 它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作 它可以表示用例的行为顺序 当执行一个用例行为时 其中的每条消息对应一个类操作
  • Unix环境高级编程环境搭建

    在网上下载书中源代码 点此连接 点击打开链接 解压文件按 cd apue 3e make 在 make 的这个过程中一般会出错 后面显示 can t find lbsd 解决办法是添加 libbsd a 的静态链接库 指令如下 ub系统 s
  • echarts x轴 type=‘time‘

    关于x轴的设置在开发中是很常见的操作 如果只是设置一些定死的数据 那么就很简单 但是如果要设置某个可变的 且数量很多的x轴的话 不是一件很简单的事情了 比如我最近在工作中就遇到了 下面来和大家一起分享一下 开发需求如下 一个折线图表 默认显
  • 团队工具

    worktile Teambition 今目标 钉钉
  • 【机器学习】- 支持向量机

    预备知识 1 法向量 Wx b 0 w是什么 Wx b 0是直线方程 其中w表示法向量 法向量的指向由具体值确定 例如x y 2 0 法向量为 1 1 指向右上方 2 距离公式 3 函数间隔 当w确定的时候 距离的远近可以比较分子 也就是说
  • python实用脚本(一)—— 批量修改目标文件夹下的文件名

    本期主题 python重命名文件脚本 批量修改某一文件夹下的后缀名 脚本 1 代码 2 使用 3 简单解析 1 代码 usr bin python3 coding utf 8 批量修改文件扩展名 import argparse import
  • python语言整理

    目录 一 python 1 python的基础语法 1 python的介绍 2 python的注释方法 1 单行注释 2 多行注释 三个单引号 或者三个双引号 3 python的数据类型 4 面向对象 2 python的构造函数 1 pyt
  • 【论文整理1】On the Continuity of Rotation Representations in Neural Networks

    1 前置知识 1 1 Gram Schmidt正交化 参考阅读 Gram Schmidt过程 看完这篇应该基本能理解 但是他对于公式的讲解有一个地方讲解得不是很清楚 即为什么分母是平方形式呢 1 2 差集 定义 差集是一种集合运算 记A B
  • Pytest自动化测试框架之Allure报告

    简介 Allure Framework是一种灵活的 轻量级 多语言测试报告工具 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息和测试 从开发 测试的角度来看 Allu
  • 9.14 C++作业

    仿照vector手动实现自己的myVector 最主要实现二倍扩容功能 include
  • 浅尝MVVMLight…

    最近要写WPF技术的项目 所以要学习一下关于WPF的知识 今天呢了解了一下MVVM的知识 具体内容如下了 MVVM呢是Model View ViewModel的缩写了 MVVM的由来算是有MVP Model View Presenter 模