0

我想太多了,让自己陷入了混乱,但无法理清头绪。

我是 WPF 的新手,我正在尝试熟悉 MVVM。我理解这个理论。我需要一个视图、一个模型和另一个模型(称为视图模型)。

但是,如果我的模型是由 View 的构造函数的参数构造的,会发生什么情况。

所以,假设我有一个完全空的项目,唯一的事情是我有一个重载的 MainWindow 构造函数,它采用模型:

public MainWindow(Logging.Logger logFile)
        {
            InitializeComponent();
            this.DataContext = logFile;
        }

模型是日志文件。当我没有单独的 Model 类时,我还能实现 MVVM 吗?

任何想法将不胜感激。

4

3 回答 3

2

你多虑了。

MVVM 有几个组件:

看法:

该视图提供了一个关于数据的视图。视图从视图模型中获取数据

视图模型:

视图模型用于组织您的数据,以便您可以将一个或多个数据源组织成一个可以查看的连贯结构。视图模型还可以执行基本验证。ViewModel 不了解 UI,因此不应包含对控件、可见性等的引用。viewmodel 从服务中获取其数据。

服务:

服务提供来自外部来源的数据。这些可以是 WCF、Web 服务、MQ 等(你懂的)。服务返回的数据可能需要调整,以便可以在 UI 中显示。为此,您将从服务中获取原始数据并将其转换为一个或多个模型对象。

模型:

模型对象是已创建的对象,以便可以轻松地显示/使用 UI。

您可能会发现不需要对来自服务的数据进行整形(幸运的是),在这种情况下,无需创建模型对象。您可能还决定不希望您的服务直接与您的视图模型对话,而是让它们通过“中介”对象获取数据。这在某些情况下也很好(通常当您从一个源/多个源接收连续的数据流时)。

MVVM 有点像粥:您可以添加很多潜在的装饰物,但您不一定需要全部添加。或者想要。

这有帮助吗?

编辑:刚刚偶然发现:MVVM 是什么的更深入的表达:Mvvm Standardization。这也可能有用

于 2012-10-14T19:53:54.137 回答
1

Model 是 ViewModel 知道的东西,但 View 不知道。如果您需要提供有关 Logger 的信息,您当然可以拥有一个了解 Logger 的 LoggerViewModel,然后 View 最终会了解 ViewModel。有几种方法可以做到这一点,在视图构造函数中设置 DC 就是其中之一。

在基本了解谁知道谁之后,真正构成 MVVM 架构模式 IMO 的是 ViewModel 通过数据绑定与 View 通信。不多也不少。很多好东西都由此产生,但这正是它与其他关注点分离模式(如表示模型、MVP 等)不同的症结所在

也就是说,您需要通过一些示例项目来感受它。当您遇到问题时,在 SO 上提问非常棒,但您必须意识到您的问题充其量只是有点模糊。此外,除非您真的希望在视图中显示日志记录信息,否则日志记录不是 MVVM 关注的问题。它很有趣,但不是 MVVM。

Google Josh Smith 在 MSDN 上的 MVVM 演示,这是一个非常丰富但平易近人的项目。并在他们出现时提出更多问题或在此处改进问题!

HTH,
绿柱石

于 2012-10-15T01:14:33.700 回答
1

忘记风景!至少在一开始;)

试着想想你想要什么,你需要什么。我的理解是你想处理一个日志文件。所以你需要一个视图模型。

public class LoggerViewmodel{}

您可以将日志文件作为 vm ctor 的参数。现在你必须考虑你想用你的日志文件做什么?对于您想要在视图模型上创建属性(LastModified、LastRow 等)的所有内容。

顺便说一句,做 mvvm 有两种不同的方法,第一种是view first,另一种是viewmodel first。我在我的项目中都这样做,并采用更适合的方法(最先使用视图模型;))来满足我的需求。

请编辑您的问题并添加您想对日志文件执行的操作,然后我们可以为您提供更好的答案。

编辑:

当我没有单独的 Model 类时,我还能实现 MVVM 吗?

以简短的方式回答您的问题-是的,您可以。您必须将视图和视图模型分开并使用绑定将视图绑定到数据上下文(视图模型)。

于 2012-10-15T08:18:45.383 回答