上一篇文章介绍了怎样快速搭建一个基于MVVMLight的程序http://www.cnblogs.com/whosedream/p/mvvmlight1.html算是简单入门了下,今天我们来做一个稍许复杂点的应用,关于这个应用我是找了个CodePlex上的小例子加以改造的。

需求大致如下

1.用户输入一定规格的数据

  例如:

  •     buy car;100000
  •     buy bike;3000
  •     receive;20000

2.用户自定义类别,并将索引值(指用于匹配数据的关键字)关联上类别

  例如:

  •    category name: 买车   ,token value:car
  •    category name:  买自行车,token value: bike
  • category name:    收入,token value: receive

3.程序根据类别以及它所关联的索引,生成饼状图。

  具体的逻辑我们就不去分析了,这里我们是要用MVVM思想去开发,当然还得是基于MVVMLight的。

  首先无论如何,我们会设计一个主页面,然后1,2,3功能各一个页面嵌入到主页面中去,这里我们就用tab标签进行控制页面切换,假设我们的View已经设计好了

每一个View肯定都会有一个ViewModel,并且一个ViewModel可能会包含其它的ViewModel,我们要开发的ViewModel也会是这么个结构,如下图

  主页面绑定了一个MainViewModel,而MainViewModel还包含了三个ViewModel,分别用来绑定对应的Tab标签页面,category1,category2之类也就是Model

App.xaml

 <Application.Resources>
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" /> </Application.Resources>

App的资源文件照例添加ViewModelLocator资源,用来实现IOC功能

ViewModelLocator代码

  /// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
} /// <summary>
/// 主界面ViewModel包含了3个子ViewModel
/// </summary>
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}

关于命令绑定,看一段稍许复杂点的listbox的命令绑定

  <ListBox x:Name="CategoryListbox"
Margin="0,28,15,0"
ItemsSource="{Binding Categories}"
SelectedItem="{Binding SelectedCategory, Mode=TwoWay}" >
<ListBox.ItemTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal">
<TextBlock TextWrapping="Wrap" Text="{Binding Name}" Margin="2,0" VerticalAlignment="Center" MinWidth="100"/>
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding RemoveCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<Image Height="16" Source="/BankCharts.Silverlight;component/Media/Pictures/Remove.png" Stretch="Fill" Width="16"/>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

对应下图

要实现点击X删除项

我们看到Command绑定的是RemoveCommand,来看看后台如何实现的

        //列表项上删除类别命令
public RelayCommand RemoveCommand { get; set; } public void PrepareCommand()
{
RemoveCommand = new RelayCommand(Remove); } public void Remove()
{
//容器中移除当前项
_parent.RemoveCategory(this);
}

定义了一个RelayCommand,它是何方神圣?

 public class RelayCommand : ICommand

知道了吗,它是MVVMLight的对ICommand的一层包装

想了想代码太多,一一贴出未免嫌啰嗦,那就总结下

View关联上ViewModel,CRUD业务逻辑写在ViewModel中,ViewModel操作Model,Model承载数据。

上一张效果图

源码下载  如果觉得有帮助就顶一个吧,让我乐呵乐呵

【MVVMLight小记】二.开发一个简单图表生成程序附源码的更多相关文章

  1. 一步步搭建自己的轻量级MVCphp框架-(二)一个国产轻量级框架Amysql源码分析(1)

    这个框架是我一个做PHP的朋友“祥子”介绍给我的,Git地址https://coding.net/u/srar/p/AMP/git 下面从入口文件 总线程 ( index.php )开始进行分析 &l ...

  2. 用ionic快速开发hybird App(已附源码,在下面+总结见解)

    1.ionic简介 ionic 是用于敏捷开发APP的解决方案.核心思路是:利用成熟的前端开发技术,来写UI和业务逻辑.也就是说,就是一个H5网站,这个区别于react-native,native.即 ...

  3. Vue基础语法-数据绑定、事件处理和扩展组件等知识详解(案例分析,简单易懂,附源码)

    前言: 本篇文章主要讲解了Vue实例对象的创建.常用内置指令的使用.自定义组件的创建.生命周期(钩子函数)等.以及个人的心得体会,汇集成本篇文章,作为自己对Vue基础知识入门级的总结与笔记. 其中介绍 ...

  4. 菜鸟学习SSH(一)——Struts实现简单登录(附源码)

    从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...

  5. 菜鸟学SSH(一)——Struts实现简单登录(附源码)

    从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...

  6. leaflet-webpack 入门开发系列五地图卷帘(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  7. Java经典小游戏——贪吃蛇简单实现(附源码)

    一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...

  8. Python开发中国象棋实战(附源码)

        Pygame 做的中国象棋,一直以来喜欢下象棋,写了 python 就拿来做一个试试,水平有限,电脑走法水平低,需要在下次版本中更新电脑走法,希望源码能帮助大家更好的学习 python.总共分 ...

  9. leaflet-webpack 入门开发系列六矢量瓦片(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

随机推荐

  1. Java Security:keytool工具使用说明

    Keytool用法说明 Keytool是一个key与cert的管理工具.使用keytool可以管理public key.private key,以及与key之相关的certificate. 1.com ...

  2. 0022 Java学习笔记-面向对象-继承、多态、组合

    继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...

  3. 烂泥:mysql5.5数据库cmake源码编译安装

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...

  4. Android Paint类方法说明

    * Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类, ...

  5. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  6. finereport普通报表的移动端自适应方案

    移动端报表呈现,首先要求的是页面随手机屏幕大小自动放缩(自适应),下面给出一个普通报表中的finereport移动端自适应方案,适用于finereport 7.1之前的版本. 首先,了解一下当前我们可 ...

  7. 自罚一杯-PHP基础(一)

    hi 懒癌是最可怕的癌了吧,在即将迎来本命年时,给自己定下每天必干的几件成习惯的事情,望不再鸽!! php是我一直在学习的东西,但总以为php简单,难点在需要掌握大量的相关知识,其实并不完全对,php ...

  8. 基于Bootstrap的DropDownList的JQuery组件的完善版

    在前文 创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件 中,实现了DropDownList的JQuery组件,但是留有遗憾.就是当下拉菜单出现滚动条的时候,滚动条会覆 ...

  9. hdu1251 统计难题

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=1251 题目: 统计难题 Time Limit: 4000/2000 MS (Java/Othe ...

  10. 2016-2017 CT S03E07: Codeforces Trainings Season 3 Episode 7 - HackerEarth Problems Compilation

    B: 思路: 暴力,每两个判断一下; C: 思路: 容斥定理,先枚举脖子下面那个点和那个不可描述的点,算出所有的方案数,这里面有多的腿当成了脖子或者胳膊的,然后就再枚举这种情况把这些减去,又减多了; ...