ViewModelBase && ObservableObject
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的更多相关文章
- Xamarin.Android和UWP之MVVM的简单使用(一)
0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmligh ...
- MvvmLight ToolKit 教程
MvvmLightToolKit MvvmLightToolKit的源代码是托管在CodePlex上的,我们 可以从这里获取最新版本的源代码,不仅源码,版本发布的日志,更改了哪些,修复了哪些,以及一些 ...
- WPF之MVVM模式(3)
有种想写一个MVVM框架的冲动!!! 1.Model中的属性应不应该支持OnPropertyChanged事件? 不应该.应该有ViewModel对该属性进行封装,由ViewModel提供OnProp ...
- Reactive UI -- 反应式编程UI框架入门学习(二)
前文Reactive UI -- 反应式编程UI框架入门学习(一) 介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...
- Kendo MVVM (二) ObservableObject 对象
概述 Kendo MVVM 框架关键的一个部分为 ViewModel,它主要是通过 kendo.data.ObserableObject 来提供支持的.它可以监控改变( UI 变化或是值的变化)并通知 ...
- WPF后台通知前台事件(ViewModelBase记录)
版本1: 定义:public class ModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler P ...
- MVVM 中 ViewModelBase和 CommandBase
public class ViewModelBase : INotifyPropertyChanged , IDisposable { public virtual string DisplayNam ...
- C# II: Class ViewModelBase and RelayCommand in MVVM
好久不写WPF和MVVM,新建一个Project后,想起来ViewModelBase和RelayCommand没有.以下Code摘自MSDN上的Article:Patterns - WPF Apps ...
- DispatcherHelper
DispatcherHelper 通常,WPF 应用程序从两个线程开始:一个用于处理呈现, 一个用于管理 UI.呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入.处理事件.绘制屏幕 以及运行应用 ...
随机推荐
- JavaSpring
http://www.cnblogs.com/suoning/p/5656403.html 1.序列化 JSON.stringify(obj) 序列化 JSON.parse(str) ...
- MFC MDI 主框架和标签页数据互操作
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- SQLServer 数据修复命令DBCC一览
1. DBCC CHECKDB 重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误. use master decla ...
- x01.os.9: 进程切换
进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...
- Android中设置TextView的颜色setTextColor
tv.setTextColor(Color.parseColor("#FFFFFF")); tv.setTextColor(Color.WHITE); tv.setTextColo ...
- mysql连接报错 Host ‘xxx’is blocked because of many connection errors;unblock with 'mysqladmin flush-hosts'
程序无法连接MySQL,提示: null, message from server: "Host '192.168.6.68' is blocked because of many con ...
- RabbitMQ与Redis队列对比
本文仅针对RabbitMQ与Redis做队列应用时的情况进行对比具体采用什么方式实现,还需要取决于系统的实际需求 简要介绍 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中 ...
- 利用div实现遮罩层效果
利用div实现遮罩层效果就是利用一个全屏.半透明的div遮住页面上其它元素,典型的例子就是百度的登录界面.下面贴出示例代码: <!DOCTYPE html> <html> &l ...
- KVM 介绍(5):libvirt 介绍 [ Libvrit for KVM/QEMU ]
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- input文本框和img验证码对齐问题
左边放input,右边img验证码,然后一直不能对齐,如图: img老是比input高出一个头,然后调的头都大了还是不行,照例百度之, 给input和img都加一个 vertical-align:mi ...