Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Wanna be serious
581 / 470 / 184
Регистрация: 31.07.2013
Сообщений: 1,691
1

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

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

Доброго времени суток форумчане!

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

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

Всем спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2017, 07:12
Ответы с готовыми решениями:

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

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

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

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

9
Wanna be serious
581 / 470 / 184
Регистрация: 31.07.2013
Сообщений: 1,691
22.10.2017, 16:10  [ТС] 2
Всё ещё актуально
0
Wanna be serious
581 / 470 / 184
Регистрация: 31.07.2013
Сообщений: 1,691
27.10.2017, 15:29  [ТС] 3
Актуально
0
Эксперт .NET
1792 / 1303 / 424
Регистрация: 10.06.2011
Сообщений: 2,106
27.10.2017, 17:06 4
Не знаю, существует ли спецификация по 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
581 / 470 / 184
Регистрация: 31.07.2013
Сообщений: 1,691
27.10.2017, 17:10  [ТС] 5
novikov.ea, спасибо за ответ!

Как я понимаю, судя по всему, DependencyObject, INotifyPropertyChanged и ICommand всего лишь формальность
и их нужно использовать только в том случае, если это действительно необходимо?
0
burning1ife
1447 / 1269 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
27.10.2017, 17:15 6
DependencyObject, INotifyPropertyChanged и ICommand лишь средства с помошью которых вы можете реализовать MVVM в проекте.
0
Wanna be serious
581 / 470 / 184
Регистрация: 31.07.2013
Сообщений: 1,691
27.10.2017, 17:18  [ТС] 7
kenny69, не могли бы вы кратко описать каждый из этих средств?

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

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

DependencyObject и DependencyProperty - сердце wpf без них был бы невозможен binding, стили и анимация
1
Wanna be serious
581 / 470 / 184
Регистрация: 31.07.2013
Сообщений: 1,691
27.10.2017, 17:29  [ТС] 9
kenny69, спасибо большое, теперь многое встало на свои места
0
Эксперт .NET
1792 / 1303 / 424
Регистрация: 10.06.2011
Сообщений: 2,106
27.10.2017, 18:10 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2017, 18:10

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.