暂时没有把所有倒立弄得很清楚.简单的描述一下问题的关键.
有一个TreeView
<TreeView Name="todoTreeView" ItemTemplate="{StaticResource CheckBoxItemTemplate}"/>
相对应的模板如下
<HierarchicalDataTemplate x:Key="CheckBoxItemTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <StackPanel.ContextMenu> <ContextMenu> <MenuItem Header="添加子任务" Click="AddTask_Click"/> </ContextMenu> </StackPanel.ContextMenu> <CheckBox VerticalAlignment="Center" Focusable="False" IsChecked="{Binding IsFinished}"/> <ContentPresenter Margin="2,0" Content="{Binding Title}"/> </StackPanel> </HierarchicalDataTemplate>
另外在代码中进行了数据的绑定 todoTreeView.ItemsSource = root.Children; (root为Node的一个实例,Children为ObservableCollection<Node>类型属性)
现在的问题是在AddTask_Click中如何获取的相对应Node实例. 方法是
Node node = (sender as MenuItem).DataContext as Node;
但是存在一个很大的问题,如果我的模板是这样的
<HierarchicalDataTemplate x:Key="CheckBoxItemTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <CheckBox VerticalAlignment="Center" Focusable="False" IsChecked="{Binding IsFinished}"/> <ContentPresenter Margin="2,0" Content="{Binding Title}"> <ContentPresenter.ContextMeun> <ContextMenu> <MenuItem Header="添加子任务" Click="AddTask_Click"/> </ContextMenu> </ContentPresenter.ContextMeun> </ContentPresenter> </StackPanel> </HierarchicalDataTemplate>
就是把ContentMenu放到ContentPresenter中之后(sender as MenuItem).DataContext 是一个字符串,而且刚好是Title的内容.
这个我暂时没有弄明白是为什么.