从未调用WPF校准StartDesignTime

时间:2015-07-06 16:10:19

标签: c# wpf caliburn.micro designer caliburn

Caliburn版本:2.0.2.0 VisualStudio 2015

短版

为什么BootstrapperBase的StartDesignTime从未被调用过。或者如何在设计时执行代码来初始化MVVM框架?

长版

Caliburn无法在设计过程中找到视图模型。我调试了设计器,似乎框架从未初始化。永远不会调用Bootstrapper的方法StartDesignTime。

我的理解是应该在Application.Resources初始化期间调用Bootstrapper的ctor。

<Application x:Class="CityMixServiceGui.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:cityMixServiceGui="clr-namespace:CityMixServiceGui">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary>
                <cityMixServiceGui:ServiceGuiBootstrapper x:Key="bootstrapper" />
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

    public ServiceGuiBootstrapper()
    {
        m_adqDeviceConnector = new AdqDeviceConnector();
        Initialize(); //  this call is required during design time but never called
    }

我尝试了什么

  • 丑陋的解决方法并在ViewModel ctor中创建了一个Bootstrapper,因为设计时间视图模型的ctor似乎是设计师调用的唯一代码。

在MainViewModel中,我调用Bootstrapper的这个方法

public static void InitializeForDesigner()
{
    if (null == s_designerInstance)
    {
        s_designerInstance = new ServiceGuiBootstrapper();
        s_designerInstance.Initialize();
    }
}

如果设置了设计时间DC和“cal:Bind.AtDesignTime”属性

    <UserControl x:Class="CityMixServiceGui.MainWindowView"
    //snip
          d:DataContext="{d:DesignInstance local:MainWindowViewModel,  IsDesignTimeCreatable=True}"
          cal:Bind.AtDesignTime="True">

[编辑]

我认为“正常”行为是App.xaml中的构造函数正常调用引导程序的ctor。 请参阅:Win8 Bug

这个错误已得到修复,但似乎VS2015版本与2.0.2.0相似。

感谢您的帮助

0 个答案:

没有答案