Pillar, a MVVM framework for Xamarin Forms

Pillar is a MVVM framework for Xamarin.Forms 1.x and 2.x. It includes a ViewModel first navigation system and many more cool features.

This post was originally published in 2016 and may contain outdated information.

I’m proud to annonce the release of Pillar, a lightweight MVVM framework for Xamarin.Forms 1.x and 2.x. With this framework, you won’t have to deal with page navigation or messed up code-behind anymore. Now, it’s all about view models, and navigation between view models. It rely on Autofac for dependency injection and MvvmLight for basic MVVM features and helper classes.

# Features included in Pillar:

  • ViewModel navigation, you won’t need to manipulate pages in your view models
  • Design your apps with unit testing in mind with dependency injection
  • Flexible, you can use differents patterns: ViewModel first, Messaging, ViewModelLocator
  • EventToCommand behavior and useful converters included
  • Useful views: ItemsView repeater, with optional DataTemplate selector by item type
  • Not intrusive, you can reuse your view models in other projects (WPF for example) with very few modifications

# Getting started

You can install Pillar with the Nuget package manager:

Install-Package Askaiser.Mobile.Pillar

You will find the documentation and samples on the GitHub repository.

# Quick example

Setup and configuration:

public class MyAppBootstrapper : PillarBootstrapper
    private readonly Application _app;

    public MyAppBootstrapper(Application app)
        _app = app;
    protected override void ConfigureContainer(ContainerBuilder builder)

    protected override void RegisterViews(IViewFactory viewFactory)
        viewFactory.Register<FirstViewModel, FirstView>();
        viewFactory.Register<SecondViewModel, SecondView>();
    protected override void ConfigureApplication(IContainer container)
        var viewFactory = container.Resolve<IViewFactory>();
        var page = viewFactory.Resolve<FirstViewModel>();

        _app.MainPage = new NavigationPage(page);

public class App : Application
    public App()
        new MyAppBootstrapper(this).Run();

Your first ViewModel:

public class FirstViewModel : PillarViewModelBase
    private readonly INavigator _navigator;

    public FirstViewModel(INavigator navigator)
        _navigator = navigator;

        // Go to the second view after 5 seconds

    public async void GoToSecondViewModel()
        await Task.Delay(TimeSpan.FromSeconds(5));
        await _navigator.PushAsync<SecondViewModel>();
Licensed under CC BY 4.0
Ko-fi donations Buy me a coffee