我重構具有以下結構中的一些遺留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