ViewModelBase && ObservableObject

在Mvvm中,ViewModel和Model都需要具有通知界面更新数据的能力,这都要借助于WPF中的

INotifyPropertyChanged 接口,每一个ViewModel和Model都要去实现接口就太麻烦,于是作为

Mvvm框架的MvvmLight直接为我们提供了基类,并已经实现了这个接口。ViewModel继承自ViewModelBase

,Model继承自ObservableObject。在更新属性时,调用RaisePropertyChanged()来通知界面更新。

  public class Student : ObservableObject
{
private string name; public string Name
{
get
{
return name;
}
set
{
name = value;
RaisePropertyChanged(() => Name);
}
}
}

另外ViewModelBase还提供了一个判断当前是否设计时的属性IsInDesignMode,这个属性用于在ViewModel

中区分当前是运行时还是设计时,设计时可以显示一些模拟数据,运行时就显示真实数据,对UI开发人员是一个

比较友好的东西。

class AppViewModel : ViewModelBase
{
private ObservableCollection<Student> _students; public ObservableCollection<Student> Students
{
get
{
return _students;
}
set
{
_students = value;
RaisePropertyChanged(() => Students);
}
} public AppViewModel()
{
if (IsInDesignMode)
{
//模拟数据
Students = new ObservableCollection<Student>()
{
new Student(){Name = "MaYun"}
};
}
else
{
//运行时
Students = ISchool.GetAllStudents();
}
}
}

有了这2个基类的帮助,我们还需要在界面上进行正确的绑定

<Window x:Class="MvvmDemo.Views.AppView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="AppView" Height="300" Width="300">
<Grid>
<ListView ItemsSource="{Binding Students}">
<ListView.View>
<GridView>
<GridViewColumn Header="姓名" DisplayMemberBinding="{Binding Name}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>

ListView的ItemSource绑定到了ViewModel上的Students集合,此时Vs中还不能显示数据,那是因为,

我们并没有将View和ViewModel联系起来,View的DataContext就是ViewModel,下面我们将提到一个重要

的类ViewModelLocator(视图模型定位器)

ViewModelBase && ObservableObject的更多相关文章

  1. Xamarin.Android和UWP之MVVM的简单使用(一)

    0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmligh ...

  2. MvvmLight ToolKit 教程

    MvvmLightToolKit MvvmLightToolKit的源代码是托管在CodePlex上的,我们 可以从这里获取最新版本的源代码,不仅源码,版本发布的日志,更改了哪些,修复了哪些,以及一些 ...

  3. WPF之MVVM模式(3)

    有种想写一个MVVM框架的冲动!!! 1.Model中的属性应不应该支持OnPropertyChanged事件? 不应该.应该有ViewModel对该属性进行封装,由ViewModel提供OnProp ...

  4. Reactive UI -- 反应式编程UI框架入门学习(二)

    前文Reactive UI -- 反应式编程UI框架入门学习(一)  介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...

  5. Kendo MVVM (二) ObservableObject 对象

    概述 Kendo MVVM 框架关键的一个部分为 ViewModel,它主要是通过 kendo.data.ObserableObject 来提供支持的.它可以监控改变( UI 变化或是值的变化)并通知 ...

  6. WPF后台通知前台事件(ViewModelBase记录)

    版本1: 定义:public class ModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler P ...

  7. MVVM 中 ViewModelBase和 CommandBase

    public class ViewModelBase : INotifyPropertyChanged , IDisposable { public virtual string DisplayNam ...

  8. C# II: Class ViewModelBase and RelayCommand in MVVM

    好久不写WPF和MVVM,新建一个Project后,想起来ViewModelBase和RelayCommand没有.以下Code摘自MSDN上的Article:Patterns - WPF Apps ...

  9. DispatcherHelper

    DispatcherHelper 通常,WPF 应用程序从两个线程开始:一个用于处理呈现, 一个用于管理 UI.呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入.处理事件.绘制屏幕 以及运行应用 ...

随机推荐

  1. MySQL分表自增ID解决方案

    当我们对MySQL进行分表操作后,将不能依赖MySQL的自动增量来产生唯一ID了,因为数据已经分散到多个表中. 应尽量避免使用自增IP来做为主键,为数据库分表操作带来极大的不便. 在postgreSQ ...

  2. MapReduce实例-倒排索引

    环境: Hadoop1.x,CentOS6.5,三台虚拟机搭建的模拟分布式环境 数据:任意数量.格式的文本文件(我用的四个.java代码文件) 方案目标: 根据提供的文本文件,提取出每个单词在哪个文件 ...

  3. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  4. 0008《SQL必知必会》笔记04-子查询、联接与组合查询

    1.子查询:就是嵌套的查询,用一个查询的结果作为另一个查询的条件. 比如要列出订购了物品“RGAN01”的所有顾客的ID.姓名和联系人,需要经历以下几步 (1)从orderitems中找出订购了“RG ...

  5. sql server 索引分析相关sql

    select object_id('dbo.FT_CFP_TRADE_SUBACCOUNT') select * from sys.partitions where [object_id]=14672 ...

  6. 字典dictionary

    字典,即我们可以通过索引来查找更详细的内容.每个item都是由一对index:value构成的 索引可以有副本,但是试图根据存在副本的索引访问元素时,只会取最靠后的那个. 索引必须是immutable ...

  7. [转载]python脚本删除一定时间以外的文件

    import os; import sys; import time; class DeleteLog: def __init__(self,filename,days): self.filename ...

  8. Getaddrinfo()笔记

    WSADATA dwRetval; if (WSAStartup(MAKEWORD(2,2),&dwRetval)!=0) //开启Socket { printf("WSAStart ...

  9. cookie实现自动登录

    有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机).实现这个功能关键就是服务端要识别客户的身份.而用Cookie ...

  10. mysql 二进制文件增量备份

    1.首先在my.cnf下添加二进制文件路径(windows下文件名称为my.ini) 在[mysqld]下添加 log-bin=mysql-bin 2.centos下默认安装mysql 5.6,数据默 ...