【问题标题】:Where does the Blendability come from?可混合性从何而来?
【发布时间】:2016-01-04 13:26:14
【问题描述】:

前几天我学习了 MVVM 并下载了几个示例。

以下文章非常好,包含源代码:
更好的用户和开发人员体验 - 从 Windows 窗体到使用 MVVM 的 WPF
http://reedcopsey.com/series/windows-forms-to-mvvm/

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

这显然非常好,因为它可以更容易地查看并可能修改设计。
我认为我所看到的都包含在 Blendability 这个名称下——但我对此不确定。

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

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

如果可能的话,请告诉我这个 Blendability 来自哪里以及如何在我自己的项目中实现它。

【问题讨论】:

    标签: wpf visual-studio blend


    【解决方案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 方法。任何在视图模型中引用属性的元素都会更新以显示绑定的数据。

    需要注意的重要一点是,每次构建项目时都会实例化该类。

    【讨论】:

    • 你说得对,我查了一下,就是这样。谢谢。一个有趣的细节如下:我在代码中添加了几个 debug.print,它必须被执行以显示 RSS 提要。当我在设计模式下打开表单时,这些 debug.print 消息不会显示。它们仅在我启动项目并打开表单时显示。
    • 我很确定Debug.Print 只会出现在输出窗口中。我不知道它是否在设计时出现,但我希望不会。但无论如何,请检查输出窗口。
    • 我知道 debug.print 消息应该显示在输出窗口中。当我运行项目时它们会显示在那里,但如果我在设计模式下打开窗口它们不会显示。为了测试,我在 View Model Constructor 中的 debug.print 消息后面添加了一个消息框。当我在设计模式下打开表单时,也会弹出该消息框。这只是为了说明事实上代码即使在设计模式下也会执行——这是我没想到的,但现在我明白为什么会发生这种情况了。
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2019-12-21
    • 2011-01-27
    相关资源
    最近更新 更多