2015-10-07 202 views
1

在我研究MVVM的最后几天,我下载了几个样本。混合来自哪里?

下面这篇文章是非常好的,它包含的源代码:
更好的用户和开发者体验 - 从Windows窗体到WPF用MVVM
http://reedcopsey.com/series/windows-forms-to-mvvm/

当我第一次打开该项目在Visual Studio 2013的所有字段和列表像预期的那样是空的。该程序是一个RSS阅读器,我加载了一个包含大量填充表单中所有字段的Feed。但是现在,即使我停止了该程序,我也可以看到设计中的所有数据。

All fields and lists are filled in in design mode

这显然是非常好的,因为它使人们更方便查看和修改可能设计。
我想我看到的是名称的可混合性 - 但我不确定这一点。

现在我的问题:这种混合来自哪里?我查看了项目的源代码,并没有在设计模式中找到数据的来源。

在过去的几天里,我在Visual Studio中安装了几个扩展,也许我安装了一些导致这种行为的东西。或者,在这个例子中这可能是一些特殊的功能(这在文章的任何地方都没有提到)。

如果可能请让我知道这种混合来自哪里,以及如何在我自己的项目中实现它。

回答

1

设计时间有一个漂亮的功能,如果您要将DataContext设置为一个类,那么该类实际上将在设计时实例化为

这个特定窗口的DataContext很可能是一个具有执行RSS阅读代码的构造函数的类。

借此例如:

public class MyRssReaderViewModel 
{ 
    public MyRssReaderViewModel() 
    { 
     //Read RSS and populate properties 
     LoadRSS(); 
    } 

    public void LoadRSS() 
    { 
     ... 
    } 
    ... 
} 

现在,如果你设置DataContext这样的:

<Window.DataContext> 
    <ViewModels:MyRssReaderViewModel/> 
</Window.DataContex> 

设计者将实例类在设计时,并推而广之请致电LoadRSS方法。任何引用视图模型中属性的元素都会更新以显示绑定数据。

要注意的一件重要的事情是,该类将在您每次构建该项目时实例化。

+0

你说得对,我检查过,发生了什么事。谢谢。一个有趣的细节如下:我在必须执行的代码中添加了一些debug.print以显示RSS提要。这些debug.print消息在设计模式下打开窗体时不显示。他们只显示,如果我开始项目和表格打开。 – Edgar

+0

我相当肯定'Debug.Print'只出现在**输出窗口**中。不管它在设计时是否出现在我的身上都是未知的,但我预计不会。但无论如何,请检查输出窗口。 –

+0

我知道debug.print消息应该显示在输出窗口中。当我运行该项目时,它们显示在那里,但它们不显示是否在设计模式下打开窗口。为了测试,我在View Model构造器中的debug.print消息后面添加了一个消息框。当我以设计模式打开表单时,该消息框也会弹出。这只是为了说明实际上代码甚至在设计模式下执行 - 这是我没有想到的,但现在我明白了为什么发生这种情况。 – Edgar