我正在使用 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/