Создание проекта Xamarin Forms

Создаем новый Xamarin Foms проект в Visual Studio 2013.

Создание проекта Xamarin Forms

Структура сгенерированного проекта:

Структура сгенерированного проекта

Установка MVVM Light

Для проекта с общим кодом MyNewApp, устанавливаем NuGet пакет MVVM Light libraries only (PCL)

MVVM Light

MVVM Light

Соглашаемся с лицензией, нажав кнопку I Accept.

После успешной установки в References проекта можно увидеть:

References

Использование MVVM Light

Создаем страницу Xamarin.Forms:

Xamarin.Forms page

Немного подправим файл App.cs:

using MyNewApp.Views;
using Xamarin.Forms;

namespace MyNewApp
{
	public class App
	{
		public static Page GetMainPage()
		{
			return new MainPage();
		}
	}
}

Создадим для этой страницы вью-модель:

using GalaSoft.MvvmLight;

namespace MyNewApp.ViewModels
{
	public class MainPageViewModel : ViewModelBase
	{
	}
}

В корне создадим локатор:

using GalaSoft.MvvmLight.Ioc;
using Microsoft.Practices.ServiceLocation;
using MyNewApp.ViewModels;

namespace MyNewApp
{
	public class ViewModelLocator
	{
		static ViewModelLocator()
		{
			ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
			SimpleIoc.Default.Register<MainPageViewModel>();
		}

		public MainPageViewModel Main
		{
			get
			{
				return ServiceLocator.Current.GetInstance<MainPageViewModel>();
			}
		}
	}
}

Взглянем на структуру проекта:

Структура проекта

Снова немного подправим файл App.cs:

using MyNewApp.Views;
using Xamarin.Forms;

namespace MyNewApp
{
	public class App
	{
		private static ViewModelLocator _locator;

		public static ViewModelLocator Locator
		{
			get
			{
				return _locator ?? (_locator = new ViewModelLocator());
			}
		}

		public static Page GetMainPage()
		{
			return new MainPage();
		}
	}
}

Подключим вью-модель на странице:

using Xamarin.Forms;

namespace MyNewApp.Views
{
	public partial class MainPage : ContentPage
	{
		public MainPage()
		{
			InitializeComponent();
			BindingContext = App.Locator.Main;
		}
	}
}

demo

Готово!

Скачать исходники

Теги: c#, .net, xaml, xamarin forms, ios, android, windows phone