Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693

Спецификация MVVM паттерна

11.10.2017, 07:12. Показов 904. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане!

Возникло затруднение с пониманием реализации MVVM паттерна. Саму модель Model-ViewModel-View я понимаю,
а вот с реализацией на WPF/UWP возникают проблемы. В интернете есть куча статей и видео по этом поводу, и все они,
разные. Под разным я подразумеваю то, что в одной статье говорят что MVVM характеризует наличие DependencyObject,
в другой ICommand, в третьей INotifyProperty. Естественно информация получается "по-кусочкам", и понять
истину не представляется возможным.

Собственно что мне хочется узнать: как всё таки выглядит "правильно", с точки зрения архитектуры, приложение
MVVM. Очень бы хотелось увидеть живые примеры, или статьи с подробным описанием.

Всем спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2017, 07:12
Ответы с готовыми решениями:

Реализация паттерна MVVM
Добрый день, форумчане. Ни разу не пользовался данным паттерном программирования, прочитал уже кучу статей, но ни одна из них не может мне...

Нюансы реализации паттерна MVVM
Доброго времени суток, есть вопросы по реализации MVVM: 1) Сделал простое приложение, работает, но мне кажется, что так архитектура...

Привязка данных без использования паттерна MVVM
Здраствуйте, интересует вопрос как сделать такую привязку. Имеется класс Game.cs: class Game: DependencyObject { ...

9
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
22.10.2017, 16:10  [ТС]
Всё ещё актуально
0
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
27.10.2017, 15:29  [ТС]
Актуально
0
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
27.10.2017, 17:06
Не знаю, существует ли спецификация по MVVM. Но MVVM в первую очередь характеризует наличие трёх уровней абстракции: Model, ViewModel и View. И они ни в коем случае не должны быть нарушены.
1) Model - логика, алгоритмы. НЕ ДОЛЖНА ЗАВИСЕТЬ ОТ ПЛАТФОРМЫ
2) ViewModel - содержит данные для отображения, обрабатывает действия интерфейса через команды, использует логику и алгоритмы Model. НЕ ДОЛЖНА ЗАВИСЕТЬ ОТ ПЛАТФОРМЫ
3) View - использует специализированные для платформы классы

Цитата Сообщение от Bespridelschic Посмотреть сообщение
Собственно что мне хочется узнать: как всё таки выглядит "правильно", с точки зрения архитектуры, приложение
MVVM
В моём понимании приложение "правильно" реализует MVVM, если его можно разбить на 3 проекта (или же заранее разбито)
Попробуйте создать какое-нибудь приложение с одинаковой логикой на трёх платформах: консоль, WPF, UWP. Сделайте отдельные проекты с зависимостями, как показано на рисунке.

Есть у меня минималистичный пример на использование MVVM в WPF приложении

Если речь изначально была про инструменты, то можно использовать разные фреймворки. PRISM, например. Ещё есть ReactiveUI - очень крутая и важная вещь.
Миниатюры
Спецификация MVVM паттерна  
2
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
27.10.2017, 17:10  [ТС]
novikov.ea, спасибо за ответ!

Как я понимаю, судя по всему, DependencyObject, INotifyPropertyChanged и ICommand всего лишь формальность
и их нужно использовать только в том случае, если это действительно необходимо?
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
27.10.2017, 17:15
DependencyObject, INotifyPropertyChanged и ICommand лишь средства с помошью которых вы можете реализовать MVVM в проекте.
0
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
27.10.2017, 17:18  [ТС]
kenny69, не могли бы вы кратко описать каждый из этих средств?

Как я понимаю, DependencyObject служит для завязки объекта с элементом GUI,
INotifyPropertyChanged используется как некое "событие", а ICommand - специальное
средство для работы с командами графического интерфейса.

Прошу поправить, если в чем то ошибаюсь.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
27.10.2017, 17:28
INotifyPropertyChanged - уведомление view или viewmodel, что изменилось значение свойства. Например. во viewmodel изменили значение свойства и надо дать команду view чтобы эти изменения произошли и в интерфейсе
ICommand - передача событий из view во viewmodel. Нажали кнопку, сработало событие button_click и оно передалось во ViewModel.

DependencyObject и DependencyProperty - сердце wpf без них был бы невозможен binding, стили и анимация
1
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
27.10.2017, 17:29  [ТС]
kenny69, спасибо большое, теперь многое встало на свои места
0
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
27.10.2017, 18:10
Необходимо также помнить и иметь ввиду, что DependencyObject и DependencyProperty - это понятия уровня View. Объекты уровня ViewModel не должны ими оперировать, так как это платформозависимые классы.
Сравните:
В WPF - System.Windows.DependencyObject, в UWP - Windows.UI.Xaml.DependencyObject
В WPF - System.Windows.DependencyProperty, в UWP - Windows.UI.Xaml.DependencyProperty
Тоже самое относится к Visibility и другим типам

INotifyPropertyChanged и ICommand определены в System.dll не являются платформозависимыми
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2017, 18:10
Помогаю со студенческими работами здесь

Как обработать событие в textbox с применением паттерна mvvm
Есть у меня textbox у него есть событие FocusableChanged как мне его обработать в класе viewmodel?

Передача данных между окнами в рамках паттерна MVVM
Доброго времени суток, уважаемые форумчане! Я абсолютный новичок в программировании, который пытается освоить, хотя бы в небольшой...

Может ли потребоваться применение механизма событий при использовании паттерна MVVM?
Паттерн MVVM провозглашён как базовый паттерн для приложений WPF. В паттерне MVVM используется механизм команд. То есть, если...

Реализация паттерна MVVM для новичка
Здравствуйте, недавно перешел с WinForms на WPF. Хочу сделать все правильно и разделить логику, но пока совсем не могу понять как это...

Что необходимо знать из языка C# для полноценного понимания паттерна MVVM?
Доброго времени суток, уважаемые форумчане! За последнее время стал очень часто натыкаться на такой паттерн программирования как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru