本文参考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>(); }