这只是我学习的笔记,大家学习请参考原作者。
参考学习视频:https://www.bilibili.com/video/av40886206/
参照学习博客:https://www.cnblogs.com/wzh2010/p/6285990.html
1,在项目中使用MVVMLight
【1.1】Nuget中搜索MVVMLight
【1.2】添加完成之后,会多出一些文件
完成之后多出ViewModel文件夹,包含以下两个文件:
MainViewModel.cs
ViewModelLocator.cs
另外App.xaml里将ViewModelLocator作为资源添加全局的Application.Resources里:
【1.3】如果有报错,是命名引用命名空间导致的,解决办法:
2,Model,View,ViewModel,
先建立一个完整三层结构的目录,如图,包含Model、View、ViewModel三层文件夹:
【2.1】Model
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GalaSoft.MvvmLight;//添加引用 namespace WPF_MVVMLight.Models { public class StudentModel: ObservableObject//添加继承这个ObservableObject类(可观测的类) { private int id; public int Id { get =>id; set { id = value; RaisePropertyChanged(()=>Id); } } private string name; public string Name { get => name; set { name = value; RaisePropertyChanged(() => Name); } } } }
【2.2】ViewMedol:跟View交互
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GalaSoft.MvvmLight; using WPF_MVVMLight.Models; namespace WPF_MVVMLight.ViewModel { public class StudentViewModel : ViewModelBase { public StudentViewModel() { if (IsInDesignMode) //如果是设计模式 { StudentModel=new StudentModel(){Id=1,Name = "张三"}; } else//运行模式 { //模拟从数据库取数据 StudentModel = new StudentModel() { Id = 2, Name = "李四" }; } } public Models.StudentModel StudentModel { get; set; } } }
【2.3】VIew:显示和交互ViewModel
Label Content绑定了StudentModel.Id和Name属性,所以Label应该显示StudentModel对象的Id和Name属性
这时候的ViewModel和View是没有任何关系的,所以我们在View的构造函数中写上如下代码:
3,构造器
【3.1】
所以每次App初始化的时候,就会去初始化ViewModelLocator类。