Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
09.11.2015, 07:28
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
У меня пока только вариант, что и модель, и модель представления должны реализовать INotifyPropertyChanged. Далее, модель представления подписывается на событие PropertyChanged модели и перебирарет все её свойства. Найдя то, которое изменилось, оповещает об этом представление. Т. е. примерно так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
Проблема в обработчике ModelPropertyChanged. Если свойст будет много, то это какой-то boilerplate. Может, есть способ лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 07:29
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Можно, конечно, завести по обычному событию для каждого свойства модели, и подписывать вью модель на каждое такое событие модели по отдельности. Толко это ещё бОльший boilerplate. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 07:31
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Вообще, напрягает, что надо писать всю эту кучу вызовов OnPropertyChanged. Наверное, должен быть какой-то способ автоматизировать это? Автоматизировать задачу "оповестить вью об изменении модели". ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 07:34
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Если кто не понял, то в конструкции Код: c# 1. 2.
первое "А" - это имя свойства модели, а второе "А" - имя свойства вью модели. Просто они совпадают. Надо было назвать по-разному, наверное, для понимания. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 07:40
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Нет, иногда первый способ удобен. Например, когда свойство модели составное, а свойства вью модели - нет: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Но чаще возникает именно бойлерплейт из первого сообщения, поэтому хотелось бы знать способ его обойти. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 07:46
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Да, может быть, кто-то знает, что мои поиски не нужны и будет лучшим подход именно в первом посте. Был бы рад, если бы кто-то объяснил, почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 08:47
|
|||
---|---|---|---|
|
|||
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Создавай свойства зависимости. Это нормальная практика для ViewModel-и ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 09:17
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Shocker.ProСоздавай свойства зависимости. Это нормальная практика для ViewModel-и Не понял, а как они помогут при оповещении об изменении в модели? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 10:07
|
|||
---|---|---|---|
|
|||
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Тебе не нужно об этом думать. Свойства зависимости реализуют нотификацию. Просто создаешь свойство зависимости вместо обычного свойства и привязываешь свойство представления к нему. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 10:11
|
|||
---|---|---|---|
|
|||
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
А, что касается самой модели... ну тут какая-то неверная архитектура, раз у тебя свойство модели транслируется в представление. ВьюМодель не должна зависеть от свойств модели, это модель должна хранить свои свойства, касающиеся отображения, во ВьюМодели, а не в себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 10:13
|
|||
---|---|---|---|
|
|||
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
VOva01101модель представления подписывается на событие PropertyChanged моделито есть вот это - неверно ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 10:55
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Shocker.ProА, что касается самой модели... ну тут какая-то неверная архитектура, раз у тебя свойство модели транслируется в представление. ВьюМодель не должна зависеть от свойств модели, это модель должна хранить свои свойства, касающиеся отображения, во ВьюМодели, а не в себе. Идёт какой-то процесс в модели и пользователь должен информароваться о состоянии модели. Я почти нигде в интернете не встречал подобного, чтобы модель информировала вью (через вью модель или ещё как-то). Везде через INotifyPropertyChanged только модель изменяется в ответ на действия пользователя, но не наоборот - модель сама изменяет UI пользователя. Свойства зависимости, вроде, относятся к WPF, а мне надо, чтобы модель был чистой, без примеси UI-библиотек. Ну, разве что в крайнем случае. У меня в примерах, кстати, пропущено - надо ещё изменить свойство вью модели. Т. е. не так Код: c# 1. 2.
а так Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 10:57
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Смотрите классику https://msdn.microsoft.com/en-us/library/ff798384.aspx Первый же ресунок - Model change events. Только вот в самой статье опять талдычат про оповещения между вью и вью моделью, а примера оповещения моделью вью модели и вью нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 11:06
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Ну вот, собственно, то же советуют http://stackoverflow.com/a/15440949 Только когда будет много свойств у модели, которые надо обозревать - будет перебор всех этих свойств. Либо будет куча событий в самой модели - на каждое свойство, которое надо обозревать. Тогда во вью модели надо только подписаться на всех них и перебора не будет. Но чего-то мне кажется, что это какой-то оверхед. Проще нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 11:10
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
А, ну, вобще, она и пишет, что всякие отправки сообщение между объектами есть и прочие. Ладно, почитаю... Похоже, что событие в модели, подписка на него во вью модели и последующая установка свойства вью модели - это самое простое. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 13:56
|
|||
---|---|---|---|
|
|||
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
INotifyPropertyChanged в модели? шта? свойства сущности должны быть readonly (по возможности), если нужно изменить свойство, то создается новый объект. вызов PropertyChanged может быть только во ViewModel ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2015, 19:15
|
|||
---|---|---|---|
MVVM - Как оповестить представление об изменении модели? |
|||
#18+
Roman MejtesINotifyPropertyChanged в модели? шта? свойства сущности должны быть readonly (по возможности), если нужно изменить свойство, то создается новый объект. вызов PropertyChanged может быть только во ViewModel Так я и вызываю PropertyChanged модели представления в модели представления. А PropertyChanged модели я ОТСЛЕЖИВАЮ в модели представления, а не вызываю. Я в любом случае в модели представления могу следить за свойствами модиле - просто проверять их переодически, не изменились ли они. А раз так, то лучше создать событие изменения свойства модели и подписаться на него в модели представления. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=21&tablet=1&tid=1440776]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 154ms |
0 / 0 |