私は動的にコンテキストメニューを作成しており、メニュー項目には子があります。 サブメニューの周りは最初に表示されますが、親メニューだけが表示された後はサブメニューに表示されます。子サブメニューは、表示されないコンテキストメニューにバインドされたコレクション内にあります。WPF MVVM Dynamic SubMenuバインディングの問題
VMMenuItemsは、私の見解モデルのプロパティであり、
ObservableCollection<MenuItemViewModel>
リストビュー内のデータがVMMenuItemsが完全に再構築されるたびに変化しています。 サブメニューは、既存のMenuItemViewModelのChildrenに別の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");
}
}
ああ、これは.NET 3.5 – mike