c# - Prism 区域 View 按需显示,如何在事件 View 中刷新控件

标签 c# wpf mvvm prism

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

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

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

- 一种 -
    private void RegisterViews()
    {
        var controlsView = _container.Resolve<EmulatorControlsView>();
        _regionManager.Regions["ControlsRegion"].Add(controlsView, "A");
    }

--B--
    private void RegisterViews()
    {

        var templatesView = _container.Resolve<TemplatesView>();
        _regionManager.Regions["TemplatesRegion"].Add(templatesView, "B");

        var view = _regionManager.Regions["TemplatesRegion"].GetView("B");
        _regionManager.Regions["TemplatesRegion"].Deactivate(view);
    }

我在我的应用程序初始化期间停用了 View “B”,因为 View ​​B 覆盖了我的 shell.xaml 中的 View A。

来自 View A 的单击命令将根据以下代码激活 View B 并停用 View A:
    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);
    }

我的模板区域 View 模型中存在其他按钮命令,用于停用 View A 和激活 View B。

这段代码效果很好,并且允许我按需显示我的 View 。

问题: View B 有一个 ListView 通过依赖属性绑定(bind)到 View 模型中的 ObservableCollection。我目前通过 View 模型构造函数将字符串项添加到我的 ObservableCollection 中:
    private void InitializeTemporaryLists()
    {
        TemplateList.Add("Dog");
        TemplateList.Add("Cat");
        TemplateList.Add("Horse");
    }  

但是,当 View B 被激活时,我的 ObservableCollection 不会显示其列表中的项目。

问题 :区域 View 或 View 模型中是否有可用的事件在 View 变为事件状态时通知我?
每次我的 View 变为事件状态时,我将数据从 View 模型填充到我的 View 的最佳方式是什么?

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

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

但是,我仍然很想知道你们那里的聪明程序员如何处理 Prism 区域 View 激活?我希望我可以订阅如下事件:
_regionManager.Regions["YourRegion"].OnActiveView() += HandleActiveViewEvent;

最佳答案

您可以实现 IActiveAware当 View 被激活和停用时接收通知的界面。如果您在 View 或 View 模型(但不是两者)上实现它,则由框架调用。

如果您想从 View 或 View 模型外部进行激活通知,您还可以监视该区域的 ActiveViews收集更改。这支持 INotifyCollectionChanged界面。

关于c# - Prism 区域 View 按需显示,如何在事件 View 中刷新控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163112/

相关文章:

wpf - 自动大写 WPF 中的所有输入

c# - 如何在保持其大小的同时自动将 WPF 窗口捕捉到屏幕边缘?

c# - 是否有可能在C#WPF应用程序中全局捕获意外错误-C#4.0

C# MVVM : Adding new ViewModel (strict non-exposed Model design)

c# - DirectShow(.net) h264 编码器/解码器

c# - Blazor 导出到 Excel

c# - 将数据从 View 模型绑定(bind)到 View

javascript - 看不懂绑定(bind)问题

c# - 深度优先搜索的递归方法与堆栈

c# - Collection<T> 与 List<T> 您应该在界面上使用什么?