【发布时间】:2014-01-25 11:26:14
【问题描述】:
我希望在 WPF 应用程序中实现“JQuery”样式微调器。由于此微调器将由一些单独的 PRISM 模块触发,并且我希望微调器覆盖整个应用程序窗口,因此我需要访问 MainWindow 中的属性。
我在 MainWindow 中有一个属性,但我无法从其他模块中看到它。
我尝试过 Application.Current.MainWindow 但没有运气。
我也尝试过使用 Application.Current.Properties[] 但我不知道如何触发 OnPropertyChanged 事件。
请有人指点我正确的方向。
更新: 这里有一些屏幕截图和对我想要做的更好的描述。
好的,这是我的问题的一个示例。我有一个包含以下内容的应用程序:
- WPFApp
- WPFApp.Module1
- WPFApp.Module2
- WPFApp.Module3
- WPFApp.Module4
WPFApp MainWindow 包含 2 个区域,一个菜单区域(在左侧)和一个内容区域。 每个模块包含 2 个视图:
- 加载到 MainWindow 菜单区域的菜单视图
- 加载到 MainWindow 内容区域的内容视图
在每个模块内容视图中,我想执行一个需要几秒钟的任务,并且在执行任务时,我想显示一个“Ajax 样式”微调器,它将覆盖整个应用程序窗口。 要使用此处详述的微调器类:WPF Spinner via MVVM & Attached Properties 我已经能够通过将 AsyncNotifier.Trigger(在上面的链接中详述)添加到每个模块内容视图来使用它,见下文。
我的问题是: 如果我希望微调器覆盖整个应用程序窗口,那么我需要将 AsyncNotifier.Trigger 添加到 MainWindow。我还需要从负责显示微调器的 MainWindow 中公开一个属性,并能够从每个模块中访问它。 关于如何做到这一点的任何想法?
更新:
好的,我想我可能会走得更远,但仍然有点卡在所有东西如何组合在一起。
我已经创建了我的接口并将其放入我的基础架构模块中,以便其他所有模块都可以访问它。
我正在使用以下代码从我的 AggregateModuleCatalog 类加载我的模块。
/// <summary>
/// this.Catalogs is a readonly collection of IModuleCatalog
/// Initializes the catalog, which may load and validate the modules.
/// </summary>
public void Initialize()
{
foreach (var catalog in this.Catalogs)
{
catalog.Initialize();
}
}
我的问题是我不确定应该将 SpinnerViewModel 放在哪里?它应该在我的主项目中吗?
另外,我应该在哪里使用构造函数注入传入单例?
【问题讨论】: