Базовый экскурс в MVVM Light Toolkit от практикующих?
Товарищи практикующие, нужно очень быстро понять, как работать с MVVM Light Toolkit, помогите советами и статьями.
Краткое описание ситуации (можно пропустить)
Впервые работаю с MVVM, нужно сделать небольшой проект на WPF для десктопа. Прочитал теорию, попробовал примеры - всё нормально, суть модели вроде понимаю. Но в примерах либо предлагается сделать свои реализации шаблона, либо использовать малоизвестные или уже не поддерживаемые разработки. Колхозить что-то самобытное не хочется, особенно когда читаешь на Stackoverflow всякие вопросы по сложностям реализации в MVVM чего-то, а там почти все ответы, что в MVVM Light это делается с пол-тычка.
Создав проект на MVVM Light Toolkit v4 я был удивлён обилием... вообще всего. Это сильно отличается от всех примеров, что я уже делал по статьям. Ну и неопытность накладывается, за рамки примера пока уйти не могу.
Непосредственно вопрос
Буду очень благодарен, если накидаете пример на MVVM Light Toolkit v4 простой пример: в окне есть форма (2-3 поля), кнопка и ListView. После нажатия на кнопку данные из формы передаются в метод, который возвращает список объектов, которые отображаются в ListView. Идеально, если метод выполняется асинхронно и во время его выполнения кнопка отправки не работает.
Мне для понимая, что и куда нужно размещать, этого примера хватит с головой.
Зачем вам этот MVVM Light.
Для написания любого MVVM приложения достаточно двух базовых классов.
вот накидал вам пример за 20 минут https://bitbucket.org/xakpc/mvvm
из интересных только класс AsyncDelegateCommand который позволяет создавать и биндить асинхронные команды с помощью async-await
Очень аккуратный пример, всё понятно, спасибо. Что-то похожее, только без асинхронной задачи я по урокам как раз писал. Действительно, для этой конкретной задачи более городить не стоит.
Если не против, я всё же подожду, вдруг кто примеры для MVVM Light напишет (очень уж редкая штука), а потом ваш вариант как один из ответов помечу.
@Gorily Только это.. там в команде ошибка. При вызове каждый раз содается новая команда, это неправильно. Там надо сделать приватное поле и ленивую инициализацию. Я поправил пример.
Я всегда внимательно читаю документацию, но в данном случае она отсутствует. Половина ссылок там на то, как всё установить, далее отличная инструкция - www.galasoft.ch/mvvm/creating , далее ссылки на понимание технологии MVVM (без практики работы с этим шаблоном) и пара ссылок на две инструкции, рабочая из которых одна и та содержит поверхностную информацию.
Там на два часовых видео от автора ссылки есть, в них тоже неплохо демонстрируется, и объясняется идеология: в частности то, что MVVM Light не принуждает к использованию чего-либо, используйте только то, что нужно.
Так что можно для начала не заморачиваться с Локатором, IoC и прочим (особенно если вы еще не используете юнит тесты), а взять посмотреть только базовый класс для VM и комманды, они просто сохраняют время на написание подобного в ручную, ничего сложного в них нет.
Ну так MVVM Light - это просто фреймворк, набор классов, предназначенных для построения приложений в соответствии с MVVM подходом. Для того, что бы понять как им пользоваться, нужно для начала разобраться с тем, что такое MVVM. В документации есть все необходимые ссылки.
Попробуйте сначала сделать минимальное MVVM приложение без всяких фреймворков, а потом может оказаться что MVVM Light вам вообще не нужен.
Создав проект на MVVM Light Toolkit v4 я был удивлён обилием... вообще всего.
Что за обилие? Там же просто несколько "хелперов", ничего "большого и сложного" как в Prism например нет.
Базовый класс для VM с INPC и т.п., более продвинутые команды... и все вроде из основного, не считая сниппетов для вставки свойств, комманд. Ну еще система сообщений есть.
Для человека "в теме", возможно, ничего сложного. Но для новичка - вообще непонятно, что и куда нужно размещать. Создайте пустой проект по шаблону и сравните с тем, что написал @xakpc выше - действительно не видите разницы?