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(视图模型定位器)

转载于:https://www.cnblogs.com/HelloMyWorld/p/4750068.html

ViewModelBase ObservableObject相关推荐

  1. WPF MVVM设计模式的ViewModelBase和CommandBase代码

    ViewModelBase和CommandBase代码的整理如下: 1.ViewModelBase.cs [c-sharp] view plaincopy using System; using Sy ...

  2. SwiftUI开发-@EnvironmentObject、ObservableObject、@Published理解

    对于这三个特性,我们可以简单记录一下,EnvironmentObject修饰属性是当前的环境变量,并在它自己以及它的子视图都可以直接使用,也可以叫做当前当前视图全局变量.下面我们看一个编辑学生姓名的例 ...

  3. SwiftUI 界面刷新 外部修改 ObservableObject @ObservedObject @Published

    使用State的变量只有在View body里面修改才能更新界面,在其他位置修改不会同步界面,此时需要使用协议ObservableObject来修饰外部类,其中监听的属性使用@Published,声明 ...

  4. SwiftUI 基async/await and actors ObservableObject 实现Autocomplete自动完成组件

    实战需求 SwiftUI 基async/await and actors ObservableObject 实现Autocomplete自动完成组件 本文价值与收获 看完本文后,您将能够作出下面的界面 ...

  5. swift @State @Published+@StateObject+@ObservedObject+@ObservableObject+@Binding+$0$1

    @ObservedObject,@State 和 @EnvironmentObject 有什么区别? SwiftUI Example https://fandrian-rhamadiansyah.me ...

  6. ObservableObject、Observedobject、Published的学习与使用

    ObservableObject:符合ObservableObject协议的类可以使用SwiftUI的@Published属性包装器自动声明对属性的更改,以便使用该对象的所有视图都可以重新调用其bod ...

  7. MvvmLight学习心得三

    MvvmLight的抽象类ViewModelBase继承了ObservableObject这个类,我们来看看这个类: /// <summary>/// 一个基类,为了使它的对象属性必须具有 ...

  8. WPF企业内训全程实录(中)

    摘要 WPF企业内训全程实录由于文章比较长,所以一共拆分成了三篇,上篇WPF企业内训全程实录(上)主 要讲了基础,这篇作为该实录的中篇,起着承上启下的作用,主要讲解开发模式.团队协作及应用框架.其实如 ...

  9. 利刃 MVVMLight 3:双向数据绑定

    利刃 MVVMLight 3:双向数据绑定 原文:利刃 MVVMLight 3:双向数据绑定 上篇我们已经了解了MVVM的框架结构和运行原理.这里我们来看一下伟大的双向数据绑定. 说到双向绑定,大家比 ...

最新文章

  1. Mybatis自定义排序
  2. Python基础——PyCharm版本——第一章、PyCharm工具的安装与使用
  3. mac系统 PDO连接数据库报错处理
  4. poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)
  5. python计算执行时间的函数_[python] 统计函数运行时间
  6. Deep learning:十六(deep networks)
  7. 最小二乘法,了解一下?
  8. 炮轰小米后柔宇科技再发长文声明:无意碰瓷炒作
  9. ubuntu环境配置之cuda10+tensorflow-gpu
  10. Stm32CubeMx lwip+freeRTOS TCP 服务
  11. C# 最小化到系统托盘的实现(一)
  12. 【转】惹恼程序员的十件事
  13. 移动端常见兼容性问题及解决办法
  14. python代码打包成apk反编译_python程序打包和反编译
  15. p6s与onvif_大华的录像机添加海康摄像头,使用了onvif协议,为啥也添加不进去?...
  16. k8s之service
  17. 程序设计基础II学习笔记
  18. 使用google的zxing制作二维码
  19. Mac修改文件名的颜色
  20. 金纳米颗粒上装载DNA四面体|金核(75-100nm左右)sio2壳层(3-5nm)产品描述/信息/详情

热门文章

  1. 浏览器自动化的一些体会8 访问angular页面的一个问题
  2. webapi同时支持post和get报404错误
  3. 读取文件:TypeError: an integer is required (got type str)
  4. Introduction to Mathematical Thinking - Week 3
  5. select case when if 的一些用法
  6. unity3d中获得物体的size
  7. hdu 3853 LOOPS 概率DP
  8. 注意!FOB条款下,发货人还有这些费用要承担?
  9. PMCAFF微课堂(已结束) | 典典养车新媒体负责人亲授:如何运营百万级企业服务号
  10. 我的2015:创业年终总结