关于TreeViewItem上的c#:Context菜单调用TreeViewItem的方法?

Context Menu on TreeViewItem Calls TreeViewItem's Method?

我有一个TreeView设置,因此每个TreeViewItem都将右键单击上下文菜单应用为Style。类似于:

1
2
3
4
5
6
7
8
9
10
<Grid.Resources>
    <ContextMenu x:Key="contextMenu">
         <MenuItem Header="Save"  IsEnabled="{Binding Path=Saveable}"/>
         <MenuItem Header="Copy" IsEnabled="{Binding Path=Copyable}"/>
         <MenuItem Header="Remove" IsEnabled="{Binding Path=Removeable}"/>
    </ContextMenu>
    <Style TargetType="TreeViewItem">
        <Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
    </Style>
</Grid.Resources>

Saveable,Copyable和Removeable是来自用作TreeViewItem的对象的属性。

我要寻找的是当用户单击MenuItem时,它将单击所选对象的适当方法。因此,单击"保存" MenuItem将调用object.Save(),"复制"调用object.Copy(),依此类推。但是我不确定语法是什么样子,或者不确定该想法在典型情况下是否可以接受WPF样式。我知道我可以在包含窗口中创建一个新的事件处理程序,但是我希望所选的项目本身可以处理该事件。

有何想法?

谢谢!


不幸的是,我认为没有自动的方式可以做到这一点。最接近的选项是为ContextMenu中的每个项目设置一个RoutedUICommand,然后为您的班级中的每个项目创建一个CommandBinding。如果您希望这些内容进入TreeViewItem,则可能需要对TreeViewItem进行子类化并在其中设置CommandBindings

我认为可能可行的一个选择是将MenuItem.ClickEventSetter添加到TreeViewItem样式。但是,这不起作用-可能是因为ContextMenu中的项目与TreeViewItems在不同的可视树中。