About .NET, ASP.NET, MVC, C#, WPF, WCF and everything related to .NET and more.

Новая версия Mugen MVVM Toolkit 2.0

Категории: Программирование

Сегодня, я выпустил новую версию библиотеки 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.

Начало работы

Самый лучший способ для начала работы, загрузить примеры и посмотреть, как легко можно создавать приложения, используя MVVM шаблон.

Что дальше?

Я планирую написать несколько статей, а также написать документацию по использованию Mugen MVVM Toolkit для изучения различных возможностей.

Комментарии
Оставить комментарий
*bold*
_italics_
+underline+
* Bullet List
** Bullet List 2
# Number List
## Number List 2
{"Do not apply formatting"}
{code:language} code here {code:language}.
Supports: aspx c#, c#, c++, html, sql, xml
[url:http://www.example.com]