c# - 一些 MVVM 问题(WPF C#)

标签 c# wpf mvvm algorithm

我最近一直在研究 MVVM,我似乎了解了总体思路。虽然有一些琐碎的细节我没有完全理解,但希望能在这里得到一些答案,干杯!

  1. 对整个应用程序使用一种数据模型是否不正确。通常,如果我正在创建一个小型实用程序,我会将所有逻辑数据放在一个类中。这意味着我可以拥有如下内容:

    DataStore myData = new DataStore;
    
  2. 如果可以拥有一个数据模型,那么拥有多个模型 View 也可以,比如说一个代表每个窗口或 View (这就是我设想的 MVVM 工作方式)。

  3. 鉴于以上,如果有多个模型 View ,模型似乎必须在第一个窗口( View )之前声明,应该在哪里声明?模型应该通过对后续模型 View 的引用来传递吗?这不是耦合的来源吗,因为窗口或页面( View )需要了解模型才能将其传递给模型 View ,因为 View 实例化了模型 View 。

抱歉,如果问题太多,我在单个窗口或页面意义上理解 MVVM 的想法,但是一旦我添加多个 View ,我的系统就会崩溃。我可以让它与访问外部源的单独模型一起工作以获取其数据,但如果数据需要在 View 之间保留,我就会迷路。

感谢所有花时间回复的人!

最佳答案

一些想法:

  1. 简单的应用程序不一定需要 MVVM 的复杂性 - 您或许可以省去 ViewModel - 并直接使用底层模型。请注意,不要将这种方法延伸到临界点——因为 WPF 非常依赖 INotifyPropertyChanged 和 DependencyProperties 之类的东西。您不希望不必要地开始将它们合并到您的模型类中。

  2. 是的,没关系。但是,... 请记住,如果只有一个模型实例,它会更简单 - 否则您需要在要保存(或丢失一个版本的更改)时处理来自多个 View 的合并更改。如果 ViewModel 引用相同的底层模型,这是可行的。

  3. 您无法在 MVVM 中避免一定程度的耦合。但是,(如果我正确理解您的问题)在 ModelView 之间引入耦合可能不是一个好主意 - 因为它违背了目的使每个模型成为针对特定 View 优化的模型的离散视角。

关于c# - 一些 MVVM 问题(WPF C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015705/

相关文章:

c# - 这个正则表达式在做什么 : new Regex( @"(?<!\\),");

c# - 我的 Loadbalancer 持有 ssl 证书,所以对我站点的所有请求都是 http。如何处理需要重定向的情况?

c# - 自承载 WCF 服务 : How to access the object(s) implementing the service contract from the hosting application?

c# - 如何在遵循 MVVM 格式的同时访问子 ViewModel 中的事件

c# - 具有复合集合的组合框不会随着对 observablecollection 的更改而更新

events - MVVM 绑定(bind)到 CLR 事件

c# - Max()函数的测试用例设计

c# - 如何在 C# 应用程序中实现短信/短信/彩信

.net - 保存 WPF 网页浏览器 Frame 的截图

wpf - 模板可以绑定(bind)到几何图形吗