powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TreeViewItem+ContextMenu в MVMM
9 сообщений из 9, страница 1 из 1
TreeViewItem+ContextMenu в MVMM
    #37671895
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Имеется некая ViewModel. В ней есть древовидная струкутра, которая кидается на TreeView в разметке с заданным шаблоном данных.
Во ViewModel есть команда добавления элемента в дерево.
Далее я хочу создать контекстное меню для каждого TreeViewItem. Это прописываю в стиле для treeViewItem. Все хорошо.

Вопрос: как повешать команду на MenuItemы в контекстном меню? Ведь биндится она на DataContext. А у MenuItem DataContext уже не ViewModel, а TreeViewItem. Да и собственно у самого TreeView контекст - та сама древовидная структура, а не ViewModel.

Подскажите, как до команды достучаться?
Вариант в code-behind искать нужный DataContext, который равен ViewModel - это понятно. Но хотелось бы без этого.
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37672133
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
<ContextMenu>
    <MenuItem Command="{Binding PlacementTarget.DataContext.XXX.XXX, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37672317
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял, что такое ХХХ :)

Я правильно понимаю, что PlacementTarget - это родительский элемент для меню?
И тогда PlacementTarget.DataContext возвращает все равно TreeViewItem, в котором находится это контекстное меню.

нашел вот примерчик: http://www.ikriv.com/blog/?p=434
то есть можно в Tag TreeViewItemов в стиле записывать DataContext (мою ViewModel) и потом к ней обращаться типа: PlacementTarget.Tag...
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37672360
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К, спасибо

Вариант с тегом не очень изящный, но главное, что работает )
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37672470
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sky DragonИ тогда PlacementTarget.DataContext возвращает все равно TreeViewItem, в котором находится это контекстное меню."Не читайте советских газет" (с)

Если всё сделано правильно, то:

PlacementTarget == TreeViewItem
PlacementTarget.DataContext == ViewModel элемента дерева.
PlacementTarget.DataContext.MyCommand == команда, живущая в ViewModel элемента дерева.
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37673737
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

PlacementTarget == TreeViewItem (control)
PlacementTarget.DataContext == элемент дерева, содержащегося во ViewModel, но не сама ViewModel. А команда лежит во ViewModel.

газеты не причем) все проверено вручную )
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37673741
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если бы ть еще чуть более точным, то PlacementTarget == Header TreeViewItem'а
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37673781
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sky DragonА команда лежит во ViewModel.Что мешает положить команду во вьюмодель элемента дерева?
...
Рейтинг: 0 / 0
TreeViewItem+ContextMenu в MVMM
    #37673800
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,
То, что команда используется не только в контекстном меню дерева. Есть типа тулбара с теми же командами, который находится вне дерева.

в кратце:
Код: c#
1.
2.
3.
4.
5.
public class ViewModel
{
   Дерево _дерево;
   Команды для работы с деревом;
}



То есть на форму в DataContext кидается ViewModel. На форме находится TreeView, в ItemsSource которого биндится _дерево.
Команды вешаются на кнопочки в форме.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TreeViewItem+ContextMenu в MVMM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]