|
Binding Selected TreeNode
|
|||
---|---|---|---|
#18+
Здравствуйте! весь вечер голову ломаю - не могу придмумать как забиндить выделенный сегмент TreeView переменной Mvvm весь TreeView тут Код: 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.
плюс сложность в том что каждый дочерний узел, экземпляр другого класса, чем родительский, но я думаю не проблема. Просто не могу найти решение о том как на клик забиндить переменную HierarchicalDataTemplate ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2014, 22:33 |
|
Binding Selected TreeNode
|
|||
---|---|---|---|
#18+
а) для начала в модели представления нужно создать базовый класс для элемента иерархического списка. он может наследоваться от базового класса модели представления или как то еще, дело ваше. Лично я создаю примерно такой класс: вот пример такого класса взятый из проекта: Код: 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.
у данного базового класса есть свойство IsSelected, он примет значение True. В качество метода для загрузки элементов используется делегат, который вызывается асинхронно и загружает элементы дерева. Это достаточно топорный пример, я просто дома и что нашел, то и скинул. Само свойство определяющее выделение элемента находится в элемента TreeViewItem, в котором размещается шаблон данных. TreeView Автоматически создает данный элемент и размещает его в своей панели, а внутри размещает ContentPresenter для шаблона данный. (всё это можно увидеть в визуальном дереве WPF приложения с помощью сторонних утилит или внутр. инструментами). TreeViewItem имеет зависимое свойство IsSelected и именно к нему нужно биндить свойства в модели преставления. Вот пример: Код: xml 1. 2. 3. 4. 5.
обязательно указываем режим связывания TwoWay, так как по умолчанию они OneWay. Вот собственно и всё. Теперь выделенные элементы дерева будут имеет свойство IsSelected, нужно их только найти и использовать. ) Но вообще, в WPF это вообще не нужно в большинстве случаев. Так как при использовании маршрутизирующих и обычных команд, ты можешь передать в виде параметра выделенный элемент дерева и не париться с его поиском вообще. Этот вариант как по мне будет более правильный. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 11:54 |
|
Binding Selected TreeNode
|
|||
---|---|---|---|
#18+
авторты можешь передать в виде параметра выделенный элемент дерева и не париться с его поиском вообще. Этот вариант как по мне будет более правильный. можно об этом поподробней? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 12:36 |
|
Binding Selected TreeNode
|
|||
---|---|---|---|
#18+
Roman Mejtes, нашел хорошее решение вот тут но оно помогло только от части. Там описывается расширенный класс TreeView которому добавляется свойство SelectedItem Вопрос остался в создании такого класса для HierarchicalDataTemplate потому что у него такого свойства нет ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 14:04 |
|
Binding Selected TreeNode
|
|||
---|---|---|---|
#18+
fritz321, напиши на скайп и я вышлю тебе пример проекта roman_meites. AttachedProperty для такой простой задачи вообще бесмысленен. Всё это можно сделать прямо в модели представления. способ через AttachedProperty основан на рекурсивном поиске по визуальному дереву (скорее всего). Тоже вариант, но имхо слишком громоздкий. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 18:36 |
|
|
start [/forum/topic.php?fid=21&fpage=19&tid=1440974]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 257ms |
total: | 410ms |
0 / 0 |