这就是我定义 TabControl
的方式:
<TabControl ItemsSource="{Binding OpenedProjects, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedProject, Mode=OneWay}">
<!-- headers -->
<!-- header definition is unimportant for this question -->
<!-- content -->
<TabControl.ContentTemplate>
<DataTemplate>
<local:ProjectView />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
这是我在模块类中定义的两个方法,用于注册和使用 View :
protected override void _initializeViews() {
_container.RegisterType<MainMenuView>();
_container.RegisterType<ProjectsView>();
_container.RegisterType<ProjectView>();
_container.RegisterType<ContentView>();
}
protected override void _initializeRegions() {
IRegion menuRegion = _regionManager.Regions[RegionNames.MainMenuRegion];
IRegion projectsRegion = _regionManager.Regions[RegionNames.ProjectsRegion];
IRegion contentRegion = _regionManager.Regions[RegionNames.ContentRegion];
menuRegion.Add(_container.Resolve<MainMenuView>());
projectsRegion.Add(_container.Resolve<ProjectsView>());
contentRegion.Add(_container.Resolve<ContentView>());
}
和 View 构造函数:
public ProjectView(ProjectsViewModel vm) {
InitializeComponent();
DataContext = vm;
}
我想要实现的是将 ProjectView
注入(inject)到 TabControl
的内容区域。显然,由于上述构造函数中的 ViewModel
参数,目前它不起作用。如何以 PRISM 方式创建此功能?
编辑:
我找到了这个:How to inject views into TabControl using Prism?但是,如果我和那个问题的作者一样,我会得到:
System.InvalidOperationException:ItemsControl 的 ItemsSource 属性不为空。
最佳答案
您的 TabControl 没有区域,因此您无法向 TabControl 中注入(inject)内容。否则,您只能使用简单的 MVVM 将一些东西注入(inject)您的 View 。
使用 Prism 在您的 TabControl 中注入(inject)一些东西。你只需要这一行:
<TabControl prism:RegionManager.RegionName="TabRegion"/>
然后您可以将一些非常简单的东西注入(inject)到您的 View 中。
_regionManager.RequestNavigate("TabRegion", new Uri("ProjectView", UriKind.Relative));
在此之前,您必须使用以下方法将 View 添加到您的容器中:
UnityContainer.RegisterType<object, ProjectView>("ProjectView");
要添加 Headertext,您可以轻松更改 TabItem 的样式并将 Header 绑定(bind)到 ProjectView 的 ViewModel:
<UserControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding DataContext.Name}" />
</Style>
</UserControl.Resources>
希望这就是您要找的答案^^
https://stackoverflow.com/questions/32284075/