|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Всем привет, многие сталкивались с ситуацией, когда нужно поменять DataTemplate после того, как поменялось значение, от которого зависит DataTemplate. Популярный в интернете метод следующий: Код: 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. 37. 38. 39. 40. 41.
Все работает, вопрос в следующем при уничтожении объекта _notifiedClass будут ли ссылки храниться и приводить к memory leak? Так же есть вариант для данной ситуации с DataTrigger Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Какой вариант предпочтительней? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 09:23 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Зависит от того, что за тип у тебя "notifiedClass" ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 09:47 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Shocker.Pro, это простой класс, экземпляры которого используются для биндинга. Самая регулярная ситуация. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 10:11 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
дак ведь не Selector ссылается на notifiedClass, а наоборот. а вообще очень странное применение Selector'а, непонятно зачем там вообще события. Селектор шаблона должен выдавать шаблон, а все события связанные с его обновлением не должны его касаться. Это должно происходить в модели\представлении ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 10:27 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
DataTemplateSelector вызывается только при инициализации объекта и соответственно анализирует свойство, по которому выдает нужный DataTemplate . Однако если в процессе это свойство поменяется, то DataTemplateSelector заново не отрабатывает. Вот к чему такое использование селектора. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 10:43 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
vb_subВот к чему такое использование селектора.а что за задача? В прошлом коде у тебя со стилями было слишком наворочено imho. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 10:53 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Petro123, я думаю каждый сталкивался с такой задачей, когда у например есть 2 DataTemplate, в зависимости от определенного свойства выбирается один из темплейтов. При инициализации отрабатывает DataTemplateSelector и выбирается соответственно DataTemplate . Потом у забинденного объекта это свойство меняется и нужно перерисовать новый DataTemplate. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 11:24 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Я было пытался сделать селектор, мне не понравилась его никакая работа с байндингами, я плюнул и сделал автоматический выбор шаблона по типу класса из ресурсного словаря. И не нужно никаких селекторов и триггеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 11:27 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Типа вместо разного значения какого-то свойства используются два разных класса (им никто не мешает наследоваться от одного базового. При этом раз у тебя разные темлейты, наверняка и классы в чем-то будут отличаться ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 11:28 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Shocker.Pro, такой подход к сожалению не подойдет, потому что класс должен быть именно один. Может будет понятнее на следующем примере: есть Textblock, он прибинден к определенному свойству класса. Это свойство меняется и Вы хотите визуально показать, что свойство поменялось- например сделать BackGround другим цветом- экземпляр класса должен быть тем же. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 11:38 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
можно конечно и через конвертер заморочится, но тогда datatrigger проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 11:45 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
vb_subвизуально показать, что свойство поменялось Сам менял свойство? Тогда странно. Менялось в базе другим юзверем? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 11:57 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Petro123, можно самому свойство поменять, можно по-другому -не суть важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 12:31 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
vb_subЭто свойство меняется и Вы хотите визуально показать, что свойство поменялось- например сделать BackGround другим цветом- экземпляр класса должен быть тем же.Нужно показать факт изменения свойства? Тогда анимация. Или подсвечивать определенные значения? Тогда триггер или конвертер. На крайняк, цвет может формировать сама VM ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 12:52 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
vb_subPetro123, можно самому свойство поменять, можно по-другому -не суть важно. По постановке задачи, задача странная. Кода по стилям больше чем кода по функционалу (за что платят в корпоративе) в три раза больше. У меня подозрение, что задачу можно решить другим способом и не заботится об утечке памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 12:56 |
|
Будет ли течь память?
|
|||
---|---|---|---|
#18+
Petro123, да, переписыванием контенттемплэйта Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 13:29 |
|
|
start [/forum/topic.php?fid=21&msg=39624017&tid=1440432]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
183ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 241ms |
total: | 532ms |
0 / 0 |