MVVM是Model-View-ViewModel的简写。类似于目前比较流行的MVC、MVP设计模式,主要目的是为了分离视图(View)和模型(Model)的耦合。

它是一种极度优秀的设计模式,但并非框架级别的东西,由MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构。

参考: https://www.cnblogs.com/wzh2010/p/6285954.html

主要使用方式有两种;

一种是去官网上下载MVVMLight Toolkit,安装之后,VS模板中会出现MvvmLight项目模板,你可以直接使用该项目模板来创建项目了。里面会包含默认的ViewModelLocator和MainViewModel,MainViewModel就是你Main视图的ViewModel了,而ViewModelLocator是一个全局的ViewModel加载注册器。

安装方式参考: https://www.cnblogs.com/HelloMyWorld/archive/2013/03/07/2947942.html

另一种方式就是去NuGet上安装,这无疑是最便捷的事了。在NuGet 工具箱上搜索 MVVM Light,可以看到两个项目,一个是MVVM Light , 一个是 MVVM Light libraries only。

Nuget上这两个项目的区别就是MVVM Light除了必要的GalaSoft 组件之外,还会额外添加相关分层文件目录形成简单的MVVMLight成型框架。它会帮你生成ViewModel文件夹,里面包含MainViewModel和ViewModelLocator文件。

这种方式还有一个好处,你总是可以得到最新的版本,因为nuget package是自动有更新提示的。而如果你是用Toolkit的话,则得不到更新的提示。

使用NuGet查找和安装MVVM Light

要在NuGet中查找MVVM Light,请按照以下步骤操作:

  • 在Visual Studio中打开您的项目。
  • 右键单击References文件夹,然后从上下文菜单中选择“Manage Nuget Packages ...”。(管理Nuget包)
  • 在“管理Nuget包”对话框中,选择所有。
  • 在搜索字段中,输入“mvvmlight”。
  • 选择MVVM Light包并按下Install按钮。

完成这些步骤后,对您的项目进行了以下更改:

添加了“packages”文件夹以及以下库。请注意,此文件夹将添加到项目结构的根目录中,而不会显示在“解决方案资源管理器”中。添加了另外两个类的ViewModel文件夹:

ViewModelLocator.cs   //做为全局资源,用来联系View相对应的viewmodel

<Application x:Class="MvvmLightDemo.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MvvmLightDemo" StartupUri="MainWindow.xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008" d1p1:Ignorable="d"
            xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006">
  <Application.Resources>
    <ResourceDictionary>
      <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:MvvmLightDemo.ViewModel" />
    </ResourceDictionary>
  </Application.Resources>
</Application>
 

 MainViewModel.cs    //自动为主窗口生成的viewmodel,可以删除,然后自定义。

通过添加ViewModelLocator作为全局资源来修改App.xaml文件。(已经自动添加,需要重新编译一下)

所以每次App初始化的时候,就会去初始化ViewModelLocator类。

实际上他就是一个很基本的视图模型注入器。在构造器中把使用到的ViewModel统一注册,并生成单一实例。

然后使用属性把它暴露出来,每当我们访问属性的时候,就会返回相应的ViewModel实例。

参考:https://www.cnblogs.com/manupstairs/p/4909585.html 这里是一个简单的例子。

1、直接在项目上增加的话,可能会因为缺少引用报错,需要手动增加一些USING,

2、如果有新的界面与新的viewmodel,则需要在ViewModelLocator中注册我们写好的ViewModel。

a) 在的构造函数中增加  SimpleIoc.Default.Register<自定义的ViewModel>();

b) 在类中实例化:    public MainViewModel 自定义的实例{  get  {return ServiceLocator.Current.GetInstance<自定义的ViewModel>();       }   }

3、Model中,对应的字段属性需要有通知事件,在对应的ViewModel定义的集合或者字段也需要有通知事件。

4、界面与后台的绑定,

前台:在<Window>标签中增加  DataContext="{Binding Source={StaticResource Locator},Path=注册的自定义实例}"

后台:在对应的.cs的构造函数中增加  this.DataContext = new 自定义的ViewModel();

 5、引用报错的问题

安装完成后,在使用过程中,可能会遇到问题报错,查询资料显示可能是由于MvvmLight没有及时更新,如果将图中的CommonServiceLocator升级到最新的2.x版本之后,它所依赖的ServiceLication的名称空间变为了CommonServiceLocator,导致安装MvvmLight之后自动生成的代码就出现了错误,如果你使用了最新版本,那么就需要手动修改一下这个名称空间,或者删除这个命令空间~

 6、Set方法来给属性赋值报错。

Set方法可能报错,这里有三个方法:

1、将  set { Set(ref title , value); } 改成 set {Set("Title",ref title, value)};

2、将  set { Set(ref title , value); } 改成 set { title = value; RaisePropertyChanged(()=>Title); };

3、将  set { Set(ref title , value); } 改成 set { title = value; RaisePropertyChanged(“Title”); };

参考地址:https://blog.csdn.net/colingg/article/details/85624751 主要是ViewModelLocator文件介绍。

参考地址:https://www.cnblogs.com/wzh2010/p/6286923.html 主要是View文件中的绑定。

参考地址:https://www.cnblogs.com/scy251147/p/3791954.html 主要是绑定命令的深入理解。

参考地址:https://www.cnblogs.com/wzh2010/p/6425060.html  主要是绑定命令的应用理解。

4、其它参考资料

MvvmLight ToolKit 教程https://www.cnblogs.com/HelloMyWorld/p/4750070.html

MVVM、MVVMLight、MVVMLight Toolkit之我见https://www.cnblogs.com/chenxizhang/archive/2011/10/01/2197786.html

MVVM是Model-View-ViewModel的简写。类似于目前比较流行的MVC、MVP设计模式,主要目的是为了分离视图(View)和模型(Model)的耦合。它是一种极度优秀的设计模式,但并非框架级别的东西,由MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构。1、安装参考:https://www.cnblogs.com... 2、https://www.cnblogs.com/manupstairs/p/4890300.html 提供了MvvmLight框架使用入门(一)到(四)入门教程 3、http...
一、MVVM介绍 MVVM(Model-View-ViewModel)—— 类似于MVC、MVP的设计模式(非框架级别),由MVP(Model-View-Presenter)模式与WPF结合的应用方式发展演变过来的一种新型架构。主要目的是分离视图(View)和模型(Model)的耦合。 1、结构: 2、优点: (1)低耦合:视图(View)独立于Model的变化,一个ViewModel可以绑定到不同的View上。View变化时Model可以不变,Model变化时View可以不变。
MVVMLight几个主要api的功能 mvvmlight是一种MVVM的实现,它提供了丰富的工具帮助我们完成MVVM模式的开发 MvvmLight主体库和附加库 MvvmLight: ICleanup 实现了这个接口的ViewModel当不需要使用时,可以在Cleanup方法中去释放资源 ObservableObject该类实现了INotifyPropertyChanged接口,定义了一个可通知的对象基类,供ViewModelBase继承 , ViewModelBase属于主体库,继承自Observabl
  MvvmLight是比较流行的MVVM框架,相对较为简单易用。可能正因为简单,对应的帮助文档不多,对初学者就不够友好了。这里会用几篇随笔,就个人对MvvmLight使用经验,来做一个入门的介绍。   第一步我们先找到并下载MvvmLight的最新版,我个人倾向使用NuGet。这里顺便吐槽一下,MvvmLight貌似并未在Github上创建项目,虽然作者对MS深深的爱让我感动,不过也不要排...