将设置传播到多个视图

时间:2018-10-09 19:15:08

标签: c# wpf mvvm

这是我的两难境地:

  1. 我有一个主要观点。它具有一个Settings.cs类,可从SQL Server捕获数据
  2. 我有很多(10个以上)子视图,其中有些具有子视图。
  3. 现在,我要将设置对象从主视图传递到每个单独的视图

我的问题可能是“最佳实践”,但我的ViewModels是否应该相对独立于主视图?还是可以将所有设置数据向下传递到每个视图,即使每个视图只使用其中的一小部分?

我想进行设置,每个视图模型都将调用其自己的设置类/数据,但是如果我有一个窗口(大概是一个会更改设置的设置窗口),如何在更新后的视图中更新视图模型它们是类的不同实例?

过去我做过静态处理,但是这会导致紧密耦合,因此我试图避免这种情况。

2 个答案:

答案 0 :(得分:0)

每个VM都有自己的数据,这通常被接受,因为将数据本地化到需要的地方是有意义的。但是,如果VM需要访问数据,则随着数据需求的增长,则需要提供该访问权限。如果您想设计一个适合您的访问系统。

我曾在使用应用实例上的静态变量使主VM或特定设置对象可用的系统上工作。因此,对所需数据的所有访问在整个应用程序中都是全球化的。

答案 1 :(得分:0)

我这样做的方法是创建一个设置类,该类负责对应用程序的所有设置进行序列化/反序列化。此类是静态的还是单例的,并提供对设置的全局线程安全访问。 此类还公开了一个事件“ SettingsUpdated”,只要更改设置(通常是通过调用serialize来保存更新的设置来触发),就会触发该事件。

然后,ViewModels可以简单地从此类中获取设置。而且,如果需要将设置的更改通知任何ViewModel,它们可以订阅“ SettingsUpdated”事件并读取更新的设置。