MVVM使用UI的构造函数来传递模型

时间:2012-10-14 17:52:39

标签: mvvm

我过度思考这个问题,让自己陷入困境,但无法清醒。

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

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

所以,假设我有一个完全空的项目,唯一的问题是我有一个重载的MainWindow构造函数,它接受了模型:

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

模型是logFile。当我没有单独的Model类时,我还可以实现MVVM吗?

任何想法都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

你过分思考这个。

MVVM有几个组件:

查看:

该视图提供了一个关于数据的视图。视图从viewmodel

获取其数据

视图模型:

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

服务:

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

型号:

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

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

MVVM有点像粥:你可以添加许多潜在的装饰,但你不一定需要添加它们。或者想要。

这有帮助吗?

编辑:偶然发现了这一点:更深入地表达MVVM是什么:Mvvm Standardisation。这也可能有用

答案 1 :(得分:1)

模型是ViewModel将了解但不是View的内容。如果您需要提供有关Logger的信息,您当然可以拥有一个了解Logger的LoggerViewModel,反过来View可以了解ViewModel。有几种方法可以做到这一点,在视图构造函数中设置DC就是其中之一。

之后,基本了解谁知道谁是MVVM架构模式的真正原因,IMO是ViewModel通过数据绑定与View进行通信。没有更多,也没有更少。很多好东西都来自于此,但这就是它的关键所在,它使得它与其他关注点模式的分离(如Presentation Model,MVP等)不同

那就是说,你需要通过一些示例项目来了解它。当你遇到问题时,在这里提出问题是很棒的,但你必须意识到你的问题在这里有点模糊。此外,除非您真的希望在视图中显示日志记录信息,否则日志记录不是MVVM关注的问题。它有趣,但不是MVVM。

谷歌Josh Smith在MSDN上的MVVM演示,这是一个非常内容却又平易近人的开端项目。并提出更多问题或在这里提出一个问题!

HTH,
Berryl

答案 2 :(得分:1)

忘记了观点!至少在开始时;)

尝试考虑你想要什么以及你需要什么。我的理解是你想要处理日志文件。所以你需要一个viewmodel。

public class LoggerViewmodel{}

您可以将日志文件作为参数放入vm ctor。现在你必须考虑你想用你的日志文件做什么?对于您想要的一切,在您的viewmodel上创建一个属性(LastModified,LastRow,等等)。

btw有两种不同的方式来做mvvm,首先是先查看,另一种是 viewmodel 。我在我的项目中都做了两件事,并且更好地适应了appraoch(viewmodel首先是最多的时间;))以满足我的需求。

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

编辑:

  

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

以简短的方式回答你的问题 - 是的,你可以。你必须分离视图和viewmodel并使用绑定将视图绑定到datacontext(viewmodel)。