我重构具有以下结构中的一些遗留WPF代码 -CommandParameter绑定(从嵌套的子控制到家长控制)
ChildControl - > ParentControl - > ParentView
ChildControl具有类型的ICommand的一个DependencyProperty 。 ParentControl有一个ICommand类型的DependencyProperty。 ParentView绑定到ViewModel,我们称之为ParentViewModel,并公开ICommand类型的公共属性。
ChildControl有一个ContextMenu,其中一个菜单项需要将Command属性绑定到ParentViewModel中的ICommand属性。因此,ContextMenu的DataContext绑定到PlacementTarget本身,并且MenuItem上的Command属性绑定到ChildControl中的ICommand类型的DependencyProperty。
ParentControl显示ChildControl,将ChildControl中的ICommand DependencyProperty绑定到ParentControl中的ICommand DependencyProperty。
ParentView,它公开ParentControl,将ParentControl中的ICommand DependencyProperty绑定到ParentViewModel中的ICommand属性。
但是,我需要的是ChildControl的MenuItem上的CommandParameter绑定到底层ViewModel(我们称之为ChildViewModel)。我发现上述方法很差。这是我继承的代码,不幸的是我不能改变当前的结构(即有一个ParentView暴露了一个ParentControl暴露了一个ChildControl),所以,我正在寻找关于如何做到这一点的想法,使命令和ChildControl中的MenuItem上的CommandParameter属性可以绑定到ParentViewModel中的Command属性,以便将ChildControl的DataContext实例作为Command的参数传递。该方法的
例子我想下面取:
<UserControl.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}">
<MenuItem
Header="Add"
Command="{Binding Path=DataContext.AddCommand, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"
CommandParameter="{Binding Path=DataContext.DataContext, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}" />
</ContextMenu>
</UserControl.ContextMenu>
谢谢!
你可以发布一些你正在使用的代码吗? – ProgrammingDude
刚刚编辑我的问题,包括一个代码示例。 – Chris
@Chris当文字很大时,尝试用一个注释良好的图像来描述你的问题。 – AnjumSKhan