C# 棱镜区域视图按需显示,如何在活动视图中刷新控件

C# 棱镜区域视图按需显示,如何在活动视图中刷新控件,c#,wpf,mvvm,prism,C#,Wpf,Mvvm,Prism,我正在使用WPF、MVVM和PRISM区域编写一个应用程序 我有两个区域,每个区域有一个视图(A和B)。我向regionmodules类中的区域添加视图,如下所示: // I use the following private properties in both regionmodules.cs class private readonly IUnityContainer _container; private readonly IRegionManager _regi

我正在使用WPF、MVVM和PRISM区域编写一个应用程序

我有两个区域,每个区域有一个视图(A和B)。我向regionmodules类中的区域添加视图,如下所示:

    // I use the following private properties in both regionmodules.cs class
    private readonly IUnityContainer _container;
    private readonly IRegionManager _regionManager;
--A--

“我的模板”“区域视图模型”中存在其他按钮命令,用于停用视图A并激活视图B

这段代码非常有效,允许我按需显示我的视图

问题:视图B通过dependency属性将ListView绑定到视图模型中的ObservableCollection。我当前通过视图模型构造函数将字符串项添加到ObservableCollection中:

    private void InitializeTemporaryLists()
    {
        TemplateList.Add("Dog");
        TemplateList.Add("Cat");
        TemplateList.Add("Horse");
    }  
但是,当视图B被激活时,MyObservableCollection不会显示其列表中的项目

问题:区域视图或视图模型中是否有事件可用于在视图激活时通知我?
每次视图处于活动状态时,从视图模型向视图填充数据的最佳方式是什么

非常感谢任何想法和代码示例

*更新* 我的ListView没有更新,因为我是一个愚蠢的程序员。我没有在依赖项属性中声明ObservableCollection类型

然而,我仍然很想知道你们这些聪明的程序员是如何处理棱镜区域视图激活的?我希望我能订阅以下活动:

_regionManager.Regions["YourRegion"].OnActiveView() += HandleActiveViewEvent;

您可以实现
IActiveAware
界面,以便在激活和停用视图时接收通知。如果在视图或viewmodel(但不是两者)上实现它,则框架将调用它

如果希望从视图或viewmodel外部发出激活通知,还可以监视区域的
ActiveViews
集合中的更改。这支持
INotifyCollectionChanged
接口

    private void LoadTemplateExecute()
    {
        var controlView = _regionManager.Regions["ControlsRegion"].GetView("A");
        _regionManager.Regions["ControlsRegion"].Deactivate(controlView);

        var templateView = _regionManager.Regions["TemplatesRegion"].GetView("B");
        _regionManager.Regions["TemplatesRegion"].Activate(templateView);
    }
    private void InitializeTemporaryLists()
    {
        TemplateList.Add("Dog");
        TemplateList.Add("Cat");
        TemplateList.Add("Horse");
    }  
_regionManager.Regions["YourRegion"].OnActiveView() += HandleActiveViewEvent;