I am developing a Prism Sample application with WPF following MVVM pattern, but it has some problem in my application when it pass below code :
var view = _container.Resolve<DummyView>();
IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];
I have tried out the solution proposed in other stackoverplow posts but it doesn't work.
( project github here ).
class ViewInjectionMainViewModel : BindableBase
{
IUnityContainer _container;
IRegionManager _regionMansger;
public ViewInjectionMainViewModel(IUnityContainer container, IRegionManager regionManager)
{
_container = container;
_regionMansger = regionManager;
var view = _container.Resolve<DummyView>();
IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];
region.Add(view);
}
}
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return this.Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
base.InitializeShell();
var regionManager = this.Container.Resolve<IRegionManager>();
if (regionManager != null)
{
regionManager.RegisterViewWithRegion("MainRegion", typeof(FirstView));
}
Container.RegisterType<object, RegionBasic>("RegionBasic");
Container.RegisterType<object, RegionControlMain>("RegionControlMain");
Container.RegisterType<object, DummyView>("DummyView");
Container.RegisterType<object, ViewInjectionMain>("ViewInjectionMain");
Application.Current.MainWindow.Show();
}
protected override void ConfigureModuleCatalog()
{
var catalog = (ModuleCatalog)ModuleCatalog;
catalog.AddModule(typeof(ModuleA.ModuleAModule));
catalog.AddModule(typeof(ModuleB.ModuleBModule));
catalog.AddModule(typeof(DummyModule.DummyModuleClass));
}
}
Thanks.
regionManager.RegisterViewWithRegion("MainRegion", typeof(FirstView));
regionManager.RegisterViewWithRegion("ViewInjectionMain_MainRegion", typeof(DummyView)); //add this line
and get region via Dispatcher (the ViewInjectionMain.xaml should be loaded for loading ViewInjectionMain_MainRegion also)
class ViewInjectionMainViewModel :BindableBase
{
IUnityContainer _container;
IRegionManager _regionMansger;
public ViewInjectionMainViewModel(IUnityContainer container, IRegionManager regionManager)
{
_container = container;
_regionMansger = regionManager;
System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
{
var view = _container.Resolve<DummyView>();
IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];
region.Add(view);
}));
}
}
Hope this will help you
I tested follow advice. I made some button and bound it to "DelegateCommand". It works. but when i made some function that "IRegion region = _regionMansger.Regions["ViewInjectionMain_MainRegion"];" and it call in constructor it doesn't work.
RegionManager contain region after view's viewmodel constructor ended.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.