Xamarin.Forms - MVVM ViewModel Locator Using MVVM Light

In this article, you will learn how to create a MVVM ViewModel Locator using MVVM Light in Xamarin.Forms.

Introduction

Xamarin.Forms - MVVM ViewModel Locator Using MVVM Light 
Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.
 

MVVM

 
MVVM - Model View ViewModel
 
MVVM Is the design pattern to separate the user interface & business logic concerns. I suppose that you have heard something about it. This pattern created by Microsoft is widely used with applications created with .NET Framework but not only because you can also use it with Xamarin.
 
Xamarin.Forms - MVVM ViewModel Locator Using MVVM Light 
 
There are many different frameworks to help Xamarin developers.
  • MVVM Cross
  • MVVM Fresh
  • Prism
  • MVVM Light
MVVM Light
 
MVVM Light lightweight framework allows developers to choose which components they want to use. (like ViewModel Locator, Navigation Service, Dialogue Service)
 
Prerequisites
  • Visual Studio 2017 or later (Windows or Mac)
  • Mvvm Light Nuget

Setting up a Xamarin.Forms Project

 
Start by creating a new Xamarin.Forms project. You wíll learn more by going through the steps yourself.
 
Visual Studio 2019 has more options in the opening window. Clone or check out the code from any repository or, open a project or solution for your computer.
 
Now, you need to click "Create a new project".
 
Xamarin.Forms - MVVM ViewModel Locator Using MVVM Light 
 
Now, filter by Project Type: Mobile
 
Choose the Mobile App (Xamarin. forms) project under C# and Mobile.
 
Name your app. You probably want your project and solution to use the same name as your app. Put it on your preferred location for projects and click "Create".
 
Now, select the blank app and target platforms - Android, iOS and Windows (UWP).
 
Subsequently, go to the solution. In there, you get all the files and sources of your project (.NET Standard). Now, select the XAML page and double-click to open the MainPage.Xaml page.
 
You now have a basic Xamarin.Forms app. Click the Play button to try it out.
 
NuGet Packages
 
Now, add the following NuGet Packages.
  • MVVM Light
  • MVVM Light Libs
Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search "MVVM Light" and add Package. Remember to install it for each project (.NET Standard, Android, iO).
 
ViewModel Locator
 
Here, we are going to register Viewmodels and Create instance of viewmodel using Mvvm Light.
 
ViewModelLocator.cs
  1. using GalaSoft.MvvmLight.Ioc;  
  2. using GalaSoft.MvvmLight.Views;  
  3. using System;  
  4. using System.Collections.Generic;  
  5. using System.Text;  
  6. using XamarinStudy.ViewModels;  
  7.   
  8. namespace XamarinStudy.Services  
  9. {  
  10.     /// <summary>  
  11.     /// Author : Delpin  
  12.     /// </summary>  
  13.     public class ViewModelLocator  
  14.     {  
  15.         public ViewModelLocator()  
  16.         {  
  17.             SimpleIoc.Default.Register<LandingPageViewModel>();  
  18.         }  
  19.   
  20.         public LandingPageViewModel LandingPageVM  
  21.         {  
  22.             get  
  23.             {  
  24.                 if (!SimpleIoc.Default.IsRegistered<LandingPageViewModel>())  
  25.                 {  
  26.                     SimpleIoc.Default.Register<LandingPageViewModel>();  
  27.                 }  
  28.                 return SimpleIoc.Default.GetInstance<LandingPageViewModel>();  
  29.             }  
  30.         }  
  31.     }  
  32. }  
App.xaml.cs
 
In this step, Create a Viewmodellocator instance when your app first time open.
  1. public partial class App : Application  
  2.     {  
  3.         private static ViewModelLocator _viewModelLocator;  
  4.         public App()  
  5.         {  
  6.             InitializeComponent();  
  7.   
  8.             MainPage = new LandingPage();  
  9.         }  
  10.         public static ViewModelLocator ViewModelLocator  
  11.         {  
  12.             get { return _viewModelLocator ?? (_viewModelLocator = new ViewModelLocator()); }  
  13.         }  
  14.           
  15.     }  
BindingContext
 
Now, Set your ViewModel BindingContext to ContentPage.
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. using Xamarin.Forms;  
  8. using Xamarin.Forms.Xaml;  
  9.   
  10. namespace XamarinStudy.ContentPages  
  11. {  
  12.     [XamlCompilation(XamlCompilationOptions.Compile)]  
  13.     public partial class LandingPage : ContentPage  
  14.     {  
  15.         public LandingPage()  
  16.         {  
  17.             InitializeComponent();  
  18.             BindingContext = App.ViewModelLocator.LandingPageVM;  
  19.         }  
  20.     }  
  21. }  
Done.
 
I hope you have understood how to create a MVVM ViewModel Locator using MVVM Light in Xamarin.Forms.
 
Thanks for reading. Please share your comments and feedback. Happy Coding :)