gpt4 book ai didi

WPF MVVM 动态子菜单绑定(bind)问题

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

我正在动态创建一个上下文菜单,并且菜单项有子项。
第一次出现子菜单,但在第二次之后,只有父菜单显示。子子菜单位于绑定(bind)到它们只是不出现的上下文菜单的集合中。

VMMenuItems 是我的 View 模型中的一个属性,是

ObservableCollection<MenuItemViewModel>

每次 Listview 中的数据更改时,VMMenuItems 都会完全重建。
子菜单只是将另一个 MenuItemViewModel 添加到现有 MenuItemViewModel 的子项中。
关于如何使子菜单每次都起作用的任何想法?

编码
<Window.Resources>        
<HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}"
ItemsSource="{Binding Path=Children}">
<ContentPresenter Content="{Binding Path=MenuText}" />
</HierarchicalDataTemplate>
</Window.Resources>

<ListView.ContextMenu>
<ContextMenu ItemsSource="{Binding Path=VMMenuItems>
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Command}"/>
<Setter Property="CommandParameter" Value="{Binding MenuText}"/>
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</ListView.ContextMenu>

public class MenuItemViewModel : ViewModel
{
public MenuItemViewModel()
{
Children = new ObservableCollection<MenuItemViewModel>();
}


private string _menuText;
public string MenuText
{

get { return _menuText; }

set
{
_menuText = value;
OnPropertyChanged("MenuText");
}
}


private bool _isEnabled;
public bool IsEnabled
{
get { return _isEnabled; }

set
{
_isEnabled = value;
OnPropertyChanged("IsEnabled");
}
}


private ICommand _command;
public ICommand Command
{
get { return _command; }

set
{
_command = value;
OnPropertyChanged("Command");
}
}

private ObservableCollection<MenuItemViewModel> _children;
public ObservableCollection<MenuItemViewModel> Children
{
get { return _children; }

set
{
_children = value;
OnPropertyChanged("Children");
}
}

最佳答案

我不必使用 HierarchicalDataTemplate 并将其全部放在 ContextMenu.ItemContainerStyle 中。
我不确定为什么我的其他方式不起作用(它第一次起作用,但没有其他任何方法)。
也许其他人可以告诉我为什么它不起作用......

<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Header" Value="{Binding MenuText}"/>
<Setter Property="ItemsSource" Value="{Binding Path=Children}"/>
<Setter Property="Command" Value="{Binding Command}"/>
<Setter Property="CommandParameter" Value="{Binding MenuText}"/>
</Style>
</ContextMenu.ItemContainerStyle>

关于WPF MVVM 动态子菜单绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246503/

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