これを行うための可能な方法のサンプルを作成しました。SharedViewModelのコレクションを含むを使用しますMenuItems。と各にSharedViewModel注入されます。Menuコントロールは、のコレクションにバインドされます。ShellViewModelTabViewModelMenuItems
タブがOnActivate起動すると、メニュー項目はによって更新できますTabViewModel。
<HierarchicalDataTemplate DataType="{x:Type viewModels:MenuItemViewModel}"
ItemsSource="{Binding Path=MenuItems}">
<ContentControl cal:View.Model="{Binding}" />
</HierarchicalDataTemplate>
<Menu IsMainMenu="True"
ItemsSource="{Binding SharedViewModel.MenuItems}" />
SharedViewModel:
public class SharedViewModel : PropertyChangedBase
{
private List<MenuItemViewModel> _menuItems;
public List<MenuItemViewModel> MenuItems
{
get { return _menuItems; }
set
{
_menuItems = value;
NotifyOfPropertyChange(() => MenuItems);
}
}
}
メニューを更新するTabViewModelの例:
protected override void OnActivate()
{
base.OnActivate();
SharedViewModel.MenuItems = new List<MenuItemViewModel>
{
new MenuItemViewModel
{
Header = "MainMenuItem1",
MenuItems =
new List<MenuItemViewModel>
{
new MenuItemViewModel {Header = "SubMenuItem1"},
new MenuItemViewModel {Header = "SubMenuItem2"},
}
},
new MenuItemViewModel
{
Header = "MainMenuItem2",
MenuItems =
new List<MenuItemViewModel>
{
new MenuItemViewModel {Header = "SubMenuItem1"},
new MenuItemViewModel {Header = "SubMenuItem2"},
}
}
};
}