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