wpf - 如何在 WPF MVVM 应用程序中处理可绑定(bind)应用程序范围的变量?

标签 wpf variables mvvm desktop-application

我正在使用 MVVM 模式编写一个规模相当大的 WPF 桌面应用程序。我已经有一段时间无法让我的公共(public)属性在更新它的 View 之外的 View 中更新。

我有一个 RibbonWindow MainView,它包含一个 ContentControl,它根据用户的选择一次显示一个剩余的 View 。我有一个所有 ViewModel 都扩展的 BaseViewModel 类。除其他外,此类公开了 INotifyPropertyChanged 接口(interface)并包含 CommonDataStore 类型的 static 属性。此类还实现了 INotifyPropertyChanged 接口(interface)并包含可用于每个 ViewModel 的属性。

现在,虽然我可以从任何 ViewModel 访问并成功更新 CommonDataStore 属性,但问题是 WPF 框架只会通知当前 View 中已更改的属性。因此,尽管公共(public)值已在其他 ViewModel 中更新,但它们的关联 View 不会更新。

我的应用程序的一个示例是登录屏幕:当用户登录时,我的 LogInView 会更新数据库中的新信息(即全名),但 MainView 中的用户详细信息不会。

阅读其他几篇文章后,我还尝试将 CommonDataStore 类实现为单例,但这没有帮助。我也可以将对这个公共(public)数据对象的引用传递给 MainViewModel 中每个 ViewModel 的构造函数,但我不确定这是否是正确的方法。

我还发现,在 WPF 中,static 属性的处理方式有点像常量值。似乎他们只读取了一次值。

所以无论如何很明显,我的尝试都失败了。我想知道这样做的标准方法是什么?特别是,我需要能够绑定(bind)到公共(public)属性,并在任何公共(public)值更改时更新我的​​所有 ViewModel 和 View 。任何帮助将不胜感激。非常感谢。

编辑>> 真的吗?没有人在 MVVM WPF 应用程序中使用应用程序范围的变量?

我现在已经删除了 Common 属性声明的静态部分,并且只是将一个副本分别传递到每个 ViewModel。这似乎可行,但我真的很想知道其他人如何处理这种情况。请通过简单地告诉我您如何组织此应用程序范围内的数据来回答。

最佳答案

我做了一些类似于你最后描述的事情。我有一个名为 SecurityContext 的类,它包含一些应用程序范围的数据。当应用程序启动时创建一个实例,然后该实例通过依赖注入(inject)传递到所有 ViewModel 的构造函数中。我有一个 ViewModels 的基类,它通过常规实例属性(实现 INotifyPropertyChanged)公开该对象。

关于wpf - 如何在 WPF MVVM 应用程序中处理可绑定(bind)应用程序范围的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861829/

相关文章:

c# - 如何预加载 WPF 运行时引擎或如何减少其加载时间?

wpf - MVVM Batch Job处理文件属于ViewModel吗?

java - 将类的变量导入到另一个类

javascript - 单击后如何在 javascript/jquery 中更新变量?

wpf - 使用 MVVM 绑定(bind) WPF 菜单 - 查找错误

c# - 一个继承了DependencyObject的类如何使用?

c - 函数更改全局变量的值是否会影响加法顺序?

c# - 将绝对图像绑定(bind)到 mvvm 中的 longlistselector

c# - 在WPF应用程序中找不到Startupuri

ios - 如何在 swift 中使用 MVVM 和 RxSwift 显示/隐藏 progressHUD