最近几天我研究了 MVVM,并下载了几个示例。
以下文章非常好,包含源代码:
更好的用户和开发人员体验 - 从 Windows 窗体到使用 MVVM 的 WPF
https://web.archive.org/web/20220408112054/http://reedcopsey.com/series/windows-forms-to-mvvm/
当我第一次在 Visual Studio 2013 中打开项目时,所有字段和列表都像预期的那样为空。该程序是一个 RSS 阅读器,我加载了一个提要,其中包含许多提要项目,这些项目填充了表单中的所有字段。但现在即使我停止程序,我也可以看到设计中的所有数据。
这显然非常好,因为它更容易查看并可能修改设计。
我认为我所看到的内容包含在“可混合性”这个名称下——但我对此不确定。
现在我的问题是:这种可混合性从何而来?我查看了项目的源代码,没有发现设计模式下的数据来自哪里。
在过去的几天里,我在 Visual Studio 中安装了几个扩展,也许我安装了一些导致此行为的东西。或者这可能是本例中的一些特殊功能(本文中没有提到)。
如果可能,请让我知道这种可混合性从何而来以及我如何在自己的项目中实现它。
设计时有一个很棒的功能,如果您将
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
方法。引用视图模型中的属性的任何元素都将更新以显示绑定的数据。
需要注意的一件重要事情是,每次您build项目时,该类都会被实例化。