Сегодня, я выпустил новую версию библиотеки Mugen MVVM Toolkit. Новая версия доступна по этой ссылке или через nuget.
Введение
Mugen MVVM Toolkit делает разработку Silverlight, WPF, WinRT и WP приложений с использованием паттерна MVVM проще. Цель toolkit’a предоставить простой framework для разработки приложений с использованием паттерна MVVM. Mugen MVVM Toolkit содержит компоненты для работы с навигацией, модальными окнами, валидацией объектов и т.д. Mugen MVVM Toolkit содержит все базовые MVVM классы, такие как: ViewModelBase, RelayCommand, сервисы и т.д.Особенности
Mugen MVVM Toolkit включает в себя следующие функции, которые отличают его от других:- Решает проблему вложенных User control’ов присущую многим MVVM toolkit’ам. View-model’и создаются динамически в коде используя методы GetViewModel и GetViewModel<TViewModel>. Можно забыть про ViewModelLocator, потому что в toolkit’е все view-model’и создаются динамически и сопоставление view --> view-model происходит на лету.
[ViewModel(typeof(MainWindowViewModel))] public partial class MainWindow : Window, IWindowView { public MainWindow() { InitializeComponent(); } } public class MainWindowViewModel : WindowViewModel { } //View is already created. var viewModel = GetViewModel<MainWindowViewModel>();
- Нет проблем с диалоговыми окнами, т.к. окна также являются view-model’ями.
var viewModel = GetViewModel<MainWindowViewModel>(); if (await viewModel.ShowAsync()) { //TODO do something }
- Простое сопоставление view и view-model используя атрибуты ViewModelAttribute и PageViewModelAttribute.
- Система навигации работает с view-model’ями и позволяет дождаться завершения операции, также вы можете передавать любые параметры во время навигации.
ItemPageViewModel itemPageViewModel = GetViewModel<ItemPageViewModel>(); itemPageViewModel.Initialize(simpleModel); INavigationResult navigationResult = _navigationProvider.Navigate(itemPageViewModel); //Wait until operation completed. navigationResult .OperationResultTask .ContinueWith(task => { _messageBox.ShowAsync(string.Format("Operation completed with result = {0}", task.Result), DisplayName); });
- Различные виды view-model для различных ситуаций, ViewModelBase, WindowViewModelBase, WorkspaceViewModel, EditableViewModel, GridViewModel, ValidatableViewModel, и т.д.
- Не зависит от конкретного Ioc контейнера, вы можете использовать контейнер, который вам нравится. Уже есть реализации для MugenInjection, Ninject, Autofac. (Tookit использует интерфейс IIocAdapter для работы с контейнером)
- Поддержка асинхронных операций, все события связанные с UI выполняются в UI потоке, CanExecuteChanged, CollectionChanged, PropertyChanged, ErrorsChanged, и т.д.
- В toolkit входят потокобезопасные и поддерживающие уведомления коллекции:
- SyncronizedNotifiableCollection – имеет все функции ObservableCollection, но является потокобезопасной.
- FilterableNotifiableCollection – наследуется от SyncronizedNotifiableCollection позволяет задать любой фильтр используя делегат.
- OrderedNotifiableCollection – наследуется от SyncronizedNotifiableCollection позволяет хранить значения в упорядоченном виде.
- В toolkit входит DataAnnotationValidationProvider для валидации моделей используя DataAnnotation, также поддерживает несколько атрибутов MetadataTypeAttribute.
- Toolkit включает базовую систему валидации, которая позволяет добавить любую пользовательскую валидацию, поддерживает асинхронные операции.
- В toolkit входит базовый класс для юнит-тестирования (UnitTestBase), который облегчает процесс тестирования.
- Для платформы Windows Phone добавлен класс BindableApplicationBar.