Мне кажется, я понимаю ваш вопрос. Я думаю, что вы могли бы структурировать свои ViewModels следующим образом:
interface ICommandViewModel : ICommand
{
string Name {get;}
}
interface INodeViewModel
{
IEnumerable<ICommandViewModel> CommandList {get;}
}
public class NodeViewModel : INodeViewModel
{
public NodeViewModel()
{
//Init commandList
//Populate commandList here(you could also do lazy loading)
}
public NodeViewModel(IEnumerable<ICommandViewModel> commands)
{
CommandList = commands;
}
public IEnumerable<ICommandViewModel> CommandList {get;private set;}
}
и затем в xaml
<TreeViewItem>
<TreeViewItem.ContextMenu Items={Binding CommandList}>
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}" Command="{Binding}"/>
</DataTemplate>
</ContextMenu.ItemTemplate>
</TreeViewItem.ContextMenu>
</TreeViewItem>
У меня нет большого опыта работы с иерархической таблицей данных, но вы получаете суть из вышесказанного. Вы также можете сделать это со стилем, но передо мной нет редактора xaml, который бы дал вам правильный синтаксис.
Надеюсь, что поможет