bit*_*onk 6 wpf treeview contextmenu mvvm
我有一个ViewModel树显示为TreeView(使用HierarchicalDataTemplate).每个ViewModel实例都有不同的命令可以在其上执行,它们再次作为每个项目ViewModel的命令ViewModel列表公开.如何创建单个 ContextMenu,该TreeMenu在右键单击的TreeViewItem处打开,并从基础项ViewModel的命令ViewModels列表中填充其命令?一切都在体面的MVVM时尚......
我想我理解你的问题。我认为你可以像这样构建你的 ViewModel:
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;}
}
Run Code Online (Sandbox Code Playgroud)
然后在xaml中
<TreeViewItem>
<TreeViewItem.ContextMenu Items={Binding CommandList}>
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}" Command="{Binding}"/>
</DataTemplate>
</ContextMenu.ItemTemplate>
</TreeViewItem.ContextMenu>
</TreeViewItem>
Run Code Online (Sandbox Code Playgroud)
我对分层数据模板没有太多经验,但您可以从上面得到要点。您也可以使用 中的样式执行上述操作,但我面前没有 xaml 编辑器来为您提供正确的语法。
希望有帮助