1
我想在顯示一個contextMenu項目時使用右鍵單擊樹視圖項目。將contextMenu綁定到樹視圖的不同視圖模型
之後,我想使用一個命令,當我點擊我的MenuItem,但我需要綁定命令與不同的viewmodel和命令參數與良好的viewmodel誰來自我的treeview選定的項目。
所以,就目前而言,我有這樣的事情:
<TreeView x:Name="TreeViewProtocolsAndEquipments" AllowDrop="True"
ItemsSource="{Binding ModuleParams}">
<TreeView.Resources>
<!-- CONTEXT MENU -->
<!-- Protocol -->
<ContextMenu x:Key="ContextMenuProtocol">
<MenuItem Header="Add new equipment" Command="{Binding AddNewEquipmentCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
<MenuItem.Icon>
<Image Source="Images/Add.png" />
</MenuItem.Icon>
</MenuItem>
<Separator />
</ContextMenu>
<!-- MODULE XXX -->
<!-- ModuleParam > xxx -->
<HierarchicalDataTemplate DataType="{x:Type xxx:ModuleParamXXXViewModel}" ItemsSource="{Binding ModuleItems}">
<TextBlock Text="XXX" Foreground="Green" ContextMenu="{StaticResource ContextMenuProtocol}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
對於我的命令被綁定到時刻XXX:ModuleParamXXXViewModel如果我只是讓{結合}
- 我可以綁定我命令到我ActivatedProtocolsAndEquipmentsTreeViewModel(這個用戶控件的datacontext)並保留在CommandParameter我的xxx:ModuleParamXXXViewModel(誰是我們觸發右鍵單擊以顯示contextMenu的樹視圖中的項目)?
- 如何用MVVM實踐以其他方式實現此目標?
我還試圖用這一點,但它並沒有太多的工作:
<MenuItem Header="Add new equipment" Command="{Binding Path=DataContext.AddNewEquipmentCommand, Source={x:Reference TreeViewProtocolsAndEquipments}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
而與此我得到對象引用不設置到對象的實例
感謝你的幫助,它的工作原理,但現在它永遠不會觸發我的ContextMenu,當我右鍵單擊一個菜單項,它不顯示contextMenu,但執行命令...我的綁定在菜單項中,所以,對於我來說,它必須在context菜單中的菜單項上單擊而不是觸發moduleitem在視覺樹中的權利?那麼爲什麼它執行這樣的命令呢? – Karakayn
它的工作原理,但你沒有看到ContextMenu?這恐怕沒有意義。另外,根據我的建議更改綁定不會導致ContextMenu消失,所以我不知道您在做什麼。 – mm8
我只是愚蠢的,我讓我的CommandHandler構造函數中的某個地方_canExecute = true;所以它可以始終執行命令,不再需要點擊...現在它可以工作,但我只是禁用了MenuItem,所以我不能再點擊它...我會嘗試找出發生了什麼事(通過這個visualtree和logicaltree),謝謝你的幫助! – Karakayn