获取ContextMeunItem相对应的逻辑层对象

暂时没有把所有倒立弄得很清楚.简单的描述一下问题的关键.

有一个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的内容.

这个我暂时没有弄明白是为什么.

原文地址:https://www.cnblogs.com/atskyline/p/2674139.html