|
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 47
|
|
WPF MVVM и INotifyPropertyChanged27.08.2019, 21:43. Показов 7486. Ответов 27
Метки нет (Все метки)
Здравствуйте. Начал разбираться с MVVM. И для меня непонятно в каких случаях нам нужно наследовать интерфейс INotifyPropertyChanged в model и в viewmodel, а в каких только в viewmodel?
0
|
|
| 27.08.2019, 21:43 | |
|
Ответы с готовыми решениями:
27
INotifyPropertyChanged
|
|
Модератор
|
||
| 29.08.2019, 12:13 | ||
|
И в данном случае, как я уже неоднократно писал, речь идёт о маленьких, локальных решения создаваемы в основном для учебных целей чтобы понять как, вообще, создавать WPF+MVMM приложения. И в ракурсе этой цели (начального понимания-обучения) имеет смысл в детали реализации больших, распределённых решений? Добавлено через 3 минуты Подавляющему большинству начинающих трудно понять саму идею событийной связи от Model к View. В ВУЗах как я понял события практически не изучают. Преподают программирование на уровне Фортрана 30-летней давности. Какой смысл вместо объяснения связи Model->View объяснять что такое событие, делегаты и как их кастомно создавать?
0
|
||
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
||||||||||
| 29.08.2019, 16:59 | ||||||||||
|
Для разработки реального приложения следует использовать фреймворк. Я использую PRISM. Почитать про него можно в официальной документации или перевод на хабре. Также, чтобы не велосипедировать свои аналоги ViewModelBase, можно использовать ReactiveUI. Статьи на хабре про ReactiveUI: (свойства, коллекции, команды). Introduction to Rx Элд Хасп, в реализации вашего примера вы информируете ViewModel через событие PropertyChanged с PropertyName=ResultChange. При этом свойства с названием ResultChange не существует. Это нарушает контракт интерфейса, описанного в документации
1) Получение текстовых данных и их парсинг в объект (задача Model) 2) Преобразование и подготовка данных для отображения (задача ViewModel) 1) Объект является частью доменной модели. Это Model 2) Свойства объекта не изменяются. Но на уровне Model этот объект не используется. Тогда можно считать, что это ViewModel. 3) Свойства объекта изменяются и нужно обновлять их значения во View. Это точно ViewModel Всё зависит от того, насколько правильно соблюдены уровни абстракции. Иначе, если объект создаётся путём парсинга сообщений, а при этом он ещё и уведомляет о своих изменениях, то он выполняет роль и DTO, и, возможно, объекта доменной модели, и ViewModel'и. (Single Responsibility Principle опять плачет) Кратко о написанном выше: 1) DTO+ViewModel в лице одного объекта - нарушение MVVM. 2) Реализация INPC в объектах модели не является нарушением MVVM. Но выглядит избыточным, а ваш пример нарушает контракт интерфейса.
3
|
||||||||||
|
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 47
|
|
| 29.08.2019, 17:09 [ТС] | |
|
novikov.ea, если допустим у нас имеется MainViewModel и ContentViewModel , при этом в MainViewModel создается несколько Observable<Тип класса модели>коллекций и необходимо иметь к ней доступ с ContentViewModel. Как в этом случае лучше реализовать? Не нарушают ли принципы MVVM, если для нескольких VIEW будет одна общая ViewModel? И еще, как можно привязать каждую Observable коллекцию к определённому окну, так как каждая коллекция будет источником данных для графика, а в главном окне, есть три кнопки для открытия каждого графика соответственно?
Добавлено через 7 минут sdsd
0
|
|
|
Модератор
|
|||
| 29.08.2019, 18:21 | |||
|
Но не вижу смысла такие же приёмы использовать для мелких, учебных решений. Я сам начинающий (C# изучаю около года, WPF и того меньше) - программирование для меня хобби. И я делюсь своим личными опытом и пониманием, в том виде в каком мне кажется это будет проще понять другим начинающим. Я не знаком с Prism и ReactiveUI, но вы же знаете их, имеете опыт использования. Возьмите любой мой пример (лучше из моих задач в Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]) и сделайте тему (или темы) с реализацией этих же задач, но правильно с применением Prism и ReactiveUI. Дайте свои комментарии почему так, а не этак. Я только буду рад изучить что-то новое. Добавлено через 5 минут Возможно, такой пример разъяснения работы INPC не совсем удачен.
1
|
|||
|
Заблокирован
|
||
| 01.09.2019, 17:33 | ||
|
0
|
||
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|
| 02.09.2019, 13:14 | |
|
1
|
|
|
Заблокирован
|
|||
| 02.09.2019, 14:09 | |||
![]() Я такой катавасии, как в мире современного программирования, нигде не встречал))) P.S. Катавасия - (перен.) суматоха, суета, беспорядок.
0
|
|||
| 02.09.2019, 14:09 | |
|
Помогаю со студенческими работами здесь
28
INotifyPropertyChanged не работает
Реализация INotifyPropertyChanged Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|