0
我目前有一个使用hierarchicaldatatemplate显示数据的树视图,当用户单击Remove按钮时,它将删除选定的节点。这按预期工作。使用HierarchicalDataTemplate将命令绑定到MenuItem
但是,我没有让用户点击一个按钮,而是试图通过右键单击节点并选择相应的菜单项来执行该命令。
这被证明是非常困难的,因为它被一个节点的视图模型(它不知道任何关于视图的东西)而不是视图的相应视图模型拾取。
有没有办法把控制权移交给View的ViewModel呢?
下面是删除按钮的代码:菜单项
public RelayCommand RemoveCommand
{
get
{
if (_removeCommand == null)
{
_removeCommand = new RelayCommand(
() => this.Remove()
);
}
return _removeCommand;
}
}
public void Remove()
{
_organLocationTree2.RemoveOrganLocations(ProjectOrganLocationView.GetExtendedTreeView().SelectedItems);
ProjectOrganLocationView.GetExtendedTreeView().SelectedItems.Clear();
base.RaisePropertyChanged("DestOrganTree");
}
而XAML:
查看:
<Button Content="Remove" Grid.Row="2" Height="23" VerticalAlignment="Top" Name="removeButton"
Width="75" Margin="5,20,5,0" Command="{Binding Path=RemoveCommand}" />
视图模型
<local:ExtendedTreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubOrganLocations}">
<TextBlock Text="{Binding OrganName}" >
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header ="Add SubNode" Command="{Binding Path=MenuItem_Add}"></MenuItem>
<MenuItem Header ="Remove Node" Command="{Binding Path=RemoveCommand}"></MenuItem>
<MenuItem Header ="Edit Node" Command="{Binding Path=ProjMenuItem_Edit}"
CommandParameter="{Binding DestOrganTree, Path=Selected.OrganName}"></MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</local:ExtendedTreeView.ItemTemplate>
</local:ExtendedTreeView>
我试图实施R emove命令在节点的ViewModel中,但由于它不知道任何有关View的内容,所以它很快就变得非常混乱。
是的,这也是对我的作品更好。但我期待在树视图的每个级别上都有不同的上下文项目。我不认为这个解决方案可以解决这个问题...... #still_looking ... – CJBrew 2013-08-21 12:38:18