使用Prism,WPF更改区域中的视图

时间:2018-06-13 09:07:21

标签: c# wpf prism

尝试使用我希望在运行时更改的区域创建视图。但是在运行时得到错误如下......

        public MainWindowViewModel(IEventAggregator eventAggregator,IRegionManager regionManager, IUnityContainer container)
    {
        _regionManager = regionManager;

        NavigateCommand = new DelegateCommand<string>(Navigate);
        eventAggregator.GetEvent<UpdatedEvent>().Subscribe(Updated);
        eventAggregator.GetEvent<MapCenterChnagedEvent>().Subscribe(MapCenterChnagedEventHandler);

        eventAggregator.GetEvent<AssetSelectedEvent>().Subscribe(AssetSelectedEventHandler);
        _regionManager.RegisterViewWithRegion("ContentRegion", typeof(Views.GeoAssets));
        _regionManager.RegisterViewWithRegion("ContentRegionAsset", typeof(Views.AssetDetails));
        _regionManager.RegisterViewWithRegion("ContentRegionAsset", typeof(Views.Logs));
        _regionManager.RegisterViewWithRegion("ContentRegionAsset", typeof(Views.Keys));

        object view = container.Resolve<Views.Logs>();
        object view2 = container.Resolve<Views.Keys>();


        IRegion region = _regionManager.Regions["ContentRegionAsset"]; //get error , _regionManager has no regions defined
        region.Activate(view); trying to make view logs the active view

    }

查看XAML                                    

1 个答案:

答案 0 :(得分:0)

视图模型看起来不是注册视图的好地方。我宁愿在那里导航,因为视图模型可能会被多次创建,而视图注册更像是一次性事物。

附注:

  • 注入容器是邪恶的 - 而不是注入工厂
  • 如果您想要显示对象,请不要在视图模型中创建视图 - 而是创建视图模型
  • 如果您可以使用参数,请不要在构造函数中使用该字段(因为如果您可以在稍后重构期间删除该字段,则无法获得通知)