【问题标题】:MVVM - Model data available for multiple viewModelsMVVM - 可用于多个视图模型的模型数据
【发布时间】:2021-07-09 16:56:12
【问题描述】:

目前我正在学习 MVVM,现在我有一个新手问题。

假设我的应用程序结构如下

视图模型

  • ViewModelA
  • ViewModelB
  • ViewModelC

型号

  • ModelX

模型应保存在应用程序启动时读取的“config.xml”文件中的所有信息。

程序步骤链

  1. 应用程序启动
  2. viewModelA 将执行名为“readXML”的函数
  3. config.xml 的一些信息应该显示在view1 中,而另一些信息应该显示在view2 中,依此类推。这就是我提出以下问题的原因......

我现在如何为所有视图模型提供读取的 XML 数据?

提前致谢:)

【问题讨论】:

  • 这些视图模型在范围和功能上是否有很大不同? MVVM 的一部分是在视图之间重用您的视图模型。视图模型根本不应该关心附加到它的视图。
  • 您可以将 XML 读取移动到不同的类(您可以将其命名为 XmlReader - 非常直观),使用 XML 读取的结果填充模型实例,并为所有 3 个 VM 实例提供相同的模型实例...
  • @JonBangsberg:不是真的,viewModel 仅用于数据绑定。例如一些 ObservableCollections 在我的视图中创建动态文本框。但我认为每个视图都应该有自己的 ViewModel 吗?根据你的说法,我可以用 viewModelA 让 view1、2、3 知道,然后绑定数据?
  • @lidgy:您的建议是否符合 MVVM 标准?你希望我将类 XMLreader 作为参数传递给视图模型,不是吗?

标签: c# xml mvvm


【解决方案1】:

mvvmstructure 应如下所示。您可以使用singleton 类来使用共享资源

模型

  1. 模型A
  2. 型号B
  3. 模型C

查看

  1. 视图A
  2. 视图B
  3. 查看C

ViewModel

  1. ViewModelA
  2. ViewModelB
  3. ViewModelC

现在将ModelX 类定义为singleton 类。您可以在所有viewmodels中使用以下类。

public class XMLData
{
   private XMLData()
   {
   }
   private static XMLData instance = null;
   public static XMLData Instance
   {
      get
      {
         if (instance == null)
         {
             instance = new XMLData();
         }
         return instance;
      }
   }
   
   public static void ReadXMl()
   {
       //to do
   }
}

【讨论】:

  • 谢谢,我下周试试。之后会给出反馈
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多