本文參考Prism官方示例git
prism:RegionManager.RegionName="SomeRegion"
標記region;protected override void ConfigureRegionAdapterMappings( RegionAdapterMappings regionAdapterMappings) { base.ConfigureRegionAdapterMappings(regionAdapterMappings); regionAdapterMappings.RegisterMapping( typeof(StackPanel), Container.Resolve<StackPanelRegionAdapter>()); }
有兩種方法,第一種稱爲View Discovery,該方法適用於當region加載時就把視圖注入到region場景;另一種方法稱爲View Injection,該方法適用於當激發某一事件後view注入到region場景。github
經過以下方法實現:app
regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA));
經過以下方法實現,並可經過IRegion的Activate與Deactivate接口實現view的使能:ide
private void Button_Click(object sender, RoutedEventArgs e) { var view = _container.Resolve<ViewA>(); IRegion region = _regionManager.Regions["ContentRegion"]; region.Add(view); } private void Button_Click(object sender, RoutedEventArgs e) { //activate view a _region.Activate(_viewA); } private void Button_Click_1(object sender, RoutedEventArgs e) { //deactivate view a _region.Deactivate(_viewA); }
// App.xaml.cs protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) { moduleCatalog.AddModule<ModuleA.ModuleAModule>(); }
若是不修改命名規則,在xaml中爲窗口/控件添加以下屬性將自動匹配viewmodel:code
prism:ViewModelLocator.AutoWireViewModel="True"
能夠經過以下方法修改默認的viewmodel匹配規則,仍需在xaml中配置AutoWireViewModel:繼承
// App.xaml.cs protected override void ConfigureViewModelLocator() { base.ConfigureViewModelLocator(); ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver( (viewType) => { var viewName = viewType.FullName; var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName; var viewModelName = $"{viewName}ViewModel, {viewAssemblyName}"; return Type.GetType(viewModelName); }); }
若不想修改匹配規則,且viewmodel名稱不匹配默認規則,可經過以下方式匹配,仍需在xaml中配置AutoWireViewModel:接口
protected override void ConfigureViewModelLocator() { base.ConfigureViewModelLocator(); ViewModelLocationProvider.Register<MainWindow, CustomViewModel>(); }