MVVMLight學習筆記(二)---MVVMLight框架初探
阿新 • • 發佈:2018-11-22
一、MVVM分層概述
MVVM中,各個部分的職責如下:
Model:負責資料實體的結構處理,與ViewModel進行互動;
View:負責介面顯示,與ViewModel進行資料和命令的互動; ViewModel:負責前端檢視業務級別的邏輯結構組織,並將其反饋給前端。 二、MVVMLight框架初探 通過NuGet安裝MVVM Light 框架後,我們新建的Wpf專案中會自動生成一個ViewModel資料夾,裡面有MainViewModel.cs和ViewModelLocator.cs兩個檔案。 下面我們就首先分析下這兩個檔案的內容: MainViewModel.cs檔案分析:public class ViewModelLocator { /// <summary> /// Initializes a new instance of the ViewModelLocator class./// </summary> public ViewModelLocator() { ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); ////if (ViewModelBase.IsInDesignModeStatic) ////{ //// // Create design time view services and models //// SimpleIoc.Default.Register<IDataService, DesignDataService>(); ////} ////else ////{ //// // Create run time view services and models //// SimpleIoc.Default.Register<IDataService, DataService>(); ////} SimpleIoc.Default.Register<MainViewModel>(); } public MainViewModel Main { get { return ServiceLocator.Current.GetInstance<MainViewModel>(); } } public static void Cleanup() { // TODO Clear the ViewModels } }
在建構函式中,建立了一個SimpleIoc型別的單例項,用於註冊ViewModel,然後用ServiceLocator對這個SimpleIoc型別的單例項進行包裹,方便統一管理。
觀察App.xaml檔案,我們會發現ViewModelLocator類被生成資源字典並加入到了全域性資源,所以每次App初始化的時候,就會去初始化ViewModelLocator類。
<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>
由此分析,我們可以得出以下一般結論:
當我們自定義一個ViewModel的時候,就可以在ViewModelLocator類的建構函式中對ViewModel進行註冊,然後在該類中定義一個屬性,用於返回我們的自定義ViewModel