gpt4 book ai didi

wpf - TreeView ContextMenu MVVM 绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 22:38:00 25 4
gpt4 key购买 nike

我目前有一个使用 MVVM 模型的 UserControl。

该控件中有一个 TreeView,它显示一些项目。我为此 TreeView 添加了一个 HierarchicalDataTemplate,并且在该模板中是项目的 ContextMenu。

在 ViewModel 中,控件的 DataContext(名为 RestoresTreeViewControl)是我想要将其中一个菜单项绑定(bind)到的命令。然而我所做的似乎不起作用。我得到了通常无法找到绑定(bind)引用源的信息。

下面是尝试将 EditDatabaseCommand 绑定(bind)到菜单项之一的数据模板的一段代码。

<HierarchicalDataTemplate DataType="{x:Type model:Database}" >
<StackPanel>
<TextBlock Text="{Binding Name}" >
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit" Command="{Binding ElementName=RestoresTreeViewControl, Path=DataContext.EditDatabaseCommand}" />
<MenuItem Header="Delete"/>
<Separator/>
<MenuItem Header="Test Connection"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>

这是 ViewModel 的一部分,其中包含命令。

public ICommand EditDatabaseCommand { get; private set; }

最佳答案

不幸的是,ContextMenu 不在 VisualTree 中,因此它不会看到您的 DataContext。你可以做的是这样的(从这里复制:MVVM binding command to contextmenu item)

<Button Height="40" Margin="0,2,0,0" CommandParameter="{Binding Name}" 
Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" Command = "{Binding
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}},
Path=DataContext.ConnectCommand}">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove"
CommandParameter="{Binding Name}"
Command="{Binding Path=PlacementTarget.Tag.DataContext.RemoveCommand,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
</ContextMenu>
</Button.ContextMenu>

因此只需使用 PlacementTarget.Tag 即可找到您的 ViewModel。

关于wpf - TreeView ContextMenu MVVM 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com