<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深深的爱让我感动,不过也不要排...