【发布时间】:2011-07-15 22:24:44
【问题描述】:
我目前有一个使用分层数据模板显示数据的树视图,当用户单击“删除”按钮时,它会删除选定的节点。这按预期工作。
但是,我没有让用户单击按钮,而是尝试通过右键单击节点并选择适当的菜单项来执行命令。
事实证明这要困难得多,因为它是由节点的 ViewModel(它不知道任何关于 View)而不是 View 的相应 ViewModel 拾取的。
有没有办法将控制权交给 View 的 ViewModel?
这里是删除按钮的代码:
查看:
<Button Content="Remove" Grid.Row="2" Height="23" VerticalAlignment="Top" Name="removeButton"
Width="75" Margin="5,20,5,0" Command="{Binding Path=RemoveCommand}" />
视图模型:
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:
<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>
我试图在节点的 ViewModel 中实现一个 Remove 命令,但由于它对 View 一无所知,所以很快就变得非常混乱。
【问题讨论】:
标签: wpf data-binding mvvm