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
}
我尝试了什么
在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相似。
感谢您的帮助