|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Здравствуйте. Имеется некая ViewModel. В ней есть древовидная струкутра, которая кидается на TreeView в разметке с заданным шаблоном данных. Во ViewModel есть команда добавления элемента в дерево. Далее я хочу создать контекстное меню для каждого TreeViewItem. Это прописываю в стиле для treeViewItem. Все хорошо. Вопрос: как повешать команду на MenuItemы в контекстном меню? Ведь биндится она на DataContext. А у MenuItem DataContext уже не ViewModel, а TreeViewItem. Да и собственно у самого TreeView контекст - та сама древовидная структура, а не ViewModel. Подскажите, как до команды достучаться? Вариант в code-behind искать нужный DataContext, который равен ViewModel - это понятно. Но хотелось бы без этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 11:26 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Код: xml 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 12:57 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Не понял, что такое ХХХ :) Я правильно понимаю, что PlacementTarget - это родительский элемент для меню? И тогда PlacementTarget.DataContext возвращает все равно TreeViewItem, в котором находится это контекстное меню. нашел вот примерчик: http://www.ikriv.com/blog/?p=434 то есть можно в Tag TreeViewItemов в стиле записывать DataContext (мою ViewModel) и потом к ней обращаться типа: PlacementTarget.Tag... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 13:53 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Алексей К, спасибо Вариант с тегом не очень изящный, но главное, что работает ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 14:07 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Sky DragonИ тогда PlacementTarget.DataContext возвращает все равно TreeViewItem, в котором находится это контекстное меню."Не читайте советских газет" (с) Если всё сделано правильно, то: PlacementTarget == TreeViewItem PlacementTarget.DataContext == ViewModel элемента дерева. PlacementTarget.DataContext.MyCommand == команда, живущая в ViewModel элемента дерева. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2012, 14:39 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Алексей К, PlacementTarget == TreeViewItem (control) PlacementTarget.DataContext == элемент дерева, содержащегося во ViewModel, но не сама ViewModel. А команда лежит во ViewModel. газеты не причем) все проверено вручную ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2012, 07:42 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
А если бы ть еще чуть более точным, то PlacementTarget == Header TreeViewItem'а ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2012, 07:49 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Sky DragonА команда лежит во ViewModel.Что мешает положить команду во вьюмодель элемента дерева? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2012, 08:40 |
|
TreeViewItem+ContextMenu в MVMM
|
|||
---|---|---|---|
#18+
Алексей К, То, что команда используется не только в контекстном меню дерева. Есть типа тулбара с теми же командами, который находится вне дерева. в кратце: Код: c# 1. 2. 3. 4. 5.
То есть на форму в DataContext кидается ViewModel. На форме находится TreeView, в ItemsSource которого биндится _дерево. Команды вешаются на кнопочки в форме. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2012, 09:05 |
|
|
start [/forum/topic.php?desktop=1&fid=21&tid=1441920]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 145ms |
0 / 0 |