gpt4 book ai didi

c# - 动态创建 Hierarchical ContextMenu MVVM

转载 作者:行者123 更新时间:2023-12-03 10:57:20 25 4
gpt4 key购买 nike

我想从 ViewModel 中的数据动态创建 Hierarchical ContextMenu。

在 ViewMode 中,我定义了 ContextMenuAction:

public class ContextMenuAction : ViewModelBase
{
public string Header { get; set; }
public ICommand Action { get; set; }
public Brush Icon { get; set; }
public ObservableCollection<ContextMenuAction> SubActions { get; set; } = new ObservableCollection<ContextMenuAction>();
}

在 View 中:
<ContextMenu ItemsSource="{Binding Path=PlacementTarget.Tag.Actions, RelativeSource={RelativeSource Self}}">
<ContextMenu.ItemTemplate >
<DataTemplate DataType="MenuItem">
<MenuItem/>
</DataTemplate>
</ContextMenu.ItemTemplate>

<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="ItemsSource" Value="{Binding SubActions}"/>
<Setter Property="Header" Value="{Binding Header}" />
<Setter Property="Command" Value="{Binding Action}"/>
</Style>
</ContextMenu.ItemContainerStyle>

这是结果,上下文菜单中没有文本。

enter image description here

我已经检查了输出窗口以检查绑定(bind),所有绑定(bind)都有效,没有异常(exception)。

请帮我找出原因,在此先感谢!

最佳答案

你应该定义一个 HierarchicalDataTemplate :

<ContextMenu ItemsSource="{Binding Path=PlacementTarget.Tag.Actions, RelativeSource={RelativeSource Self}}">
<ContextMenu.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:ContextMenuAction}" ItemsSource="{Binding SubActions}">
<TextBlock Text="{Binding Header}" />
</HierarchicalDataTemplate>
</ContextMenu.ItemTemplate>
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding Action}"/>
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>

关于c# - 动态创建 Hierarchical ContextMenu MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45024658/

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