Ich benutze Prismenregionen, um dynamische TabControl
zu erstellen. Aber ich habe ein Problem mit der Übergabe des Objekts von TabItem
(übergeordnete Ansicht) an seine untergeordneten Regionen. Das Folgende ist der Code, den ich verwende, um das TabControl zu erstellen.TabControl-Region, Wie Parameter an untergeordnete Region übergeben? WPF - Prism
Shell:
XAML
<ContentControl regions:RegionManager.RegionName="ShellProjectRegion" />
ShellViewModel
regionManager.RegisterViewWithRegion(ShellProjectRegion, typeof(ProjectTabView));
ProjectTabView:
XAML
<TabControl regions:RegionManager.RegionName="ProjectTabRegion">
ProjectTabViewModel
container.RegisterType<object, ProjectView>(typeof(ProjectView).FullName);
Project:
XAML
<Grid>
<ContentControl regions:RegionManager.RegionName="ProjectExplorerRegion"
regions:RegionManager.RegionContext="{Binding}" />
</Grid>
ProjectViewModel
public class ProjectViewModel : BindableBase, INavigationAware, IActiveAware {
private ProjectItem _project;
public ProjectItem Project {
get { return _project; }
set { SetProperty(ref _project, value); }
}
public ProjectViewModel(IRegionManager regionManager) {
regionManager.RegisterViewWithRegion("ProjectExplorerRegion", typeof(ProjectExplorerView));
}
public void OnNavigatedTo(NavigationContext navigationContext) {
Project = (ProjectItem)navigationContext.Parameters["project"];
}
}
ProjectExplorerView:
xaml.cs
public ProjectExplorerView(IUnityContainer container) {
InitializeComponent();
var vm = container.Resolve<ProjectExplorerViewModel>();
RegionContext.GetObservableContext(this).PropertyChanged += (s, e) => {
var context = (ObservableObject<object>)s;
var projectVm = (ProjectViewModel)context.Value;
vm.ParentProjectInfo = projectVm.Project.ProjectInfo;
};
DataContext = vm;
}
Hinweis: Bitte beachten Sie, dass im letzten Teil des Codes innerhalb des ProjectExplorerView.xaml.cs
der Ansicht Konstruktor wird mehrere Male jedes Mal neue Tab erstellt genannt. Beim Verfolgen des Codes wird die Kontextvariable manchmal null und hat manchmal den richtigen Wert, der das Projekt ist, das ich weitergeben möchte. aber es ist immer Null am Ende des Aufrufs des Konstruktors.