/ / dynamic ContextMenu w TreeView vs. MVVM - wpf, mvvm, treeview, contextmenu

dynamic ContextMenu w TreeView vs. MVVM - wpf, mvvm, treeview, contextmenu

Mam drzewo ViewModels wyświetlane jakoTreeView (przy użyciu HierarchicalDataTemplate). Każda instancja ViewModel ma inne polecenia, które można na niej wykonać, które są ponownie widoczne jako lista poleceń ViewModels dla każdego elementu ViewModel. Jak mogę stworzyć pojedynczy ContextMenu, które otwiera się na TreeViewItem, który został kliknięty prawym przyciskiem myszy i wypełnia polecenia z bazowego elementu Polecenie ViewModel Lista ViewModels? Wszystko w przyzwoitym stylu MVVM ...

Odpowiedzi:

3 dla odpowiedzi № 1

Myślę, że rozumiem twoje pytanie. Myślę, że możesz zbudować swoje ViewModels w następujący sposób:

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;}
}

a następnie w xaml

<TreeViewItem>
<TreeViewItem.ContextMenu Items={Binding CommandList}>
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}" Command="{Binding}"/>
</DataTemplate>
</ContextMenu.ItemTemplate>
</TreeViewItem.ContextMenu>
</TreeViewItem>

Nie mam dużego doświadczenia z hierarchiądatatemplate, ale otrzymujesz sedno z powyższego. Możesz również zrobić powyższe ze stylem w, ale nie mam przed sobą edytora xaml, który zapewniłby ci prawidłową składnię.

Nadzieja, która pomaga