我正在尝试将我的 WP8 项目从自制的 MVVM 实现调整为 MVVM Light。我已经成功地完成了这个例子,并且效果很好。然后我开始为我自己的项目重复相同的步骤。
应用程序编译时没有错误,但是当我在 Expression Blend 中打开 MainPage.xaml 时,我会收到以下错误:
类 project.Services.IDataService 已注册。App.xaml,第 6 行,第 5 列
如果我查找它,它是 ViewModelLocator 注册的行:
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</Application.Resources>
我的 ViewModelLocator.cs:
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
// Create design time view services and models
// see: http://developingux.com/2012/06/10/how-to-fix-error-design-time-data-in-blend-with-mvvm-light/
if (!SimpleIoc.Default.IsRegistered<IDataService>())
{
SimpleIoc.Default.Register<IDataService, DesignDataService>();
}
}
else
{
// Create run time view services and models
if (!SimpleIoc.Default.IsRegistered<IDataService>())
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
}
// only one ViewModel for the MainPage
SimpleIoc.Default.Register<MainViewModel>();
}
正如您从我的代码注释中看到的那样,我已经尝试过这里假设的修复,但我仍然在 Blend 中遇到此错误。没有其他地方可以注册 IDataService,那么可能是什么问题?SO 上的其他问题特别针对桌面应用程序,并且也仅包含上述某种修复,其中在注册 ViewModelLocator 之前首先进行检查。
有任何想法吗?:)
更新 1: 我已经设法在 Visual Studio 中显示我的设计时间。我仍然在我的代码隐藏文件中手动引用 DataContext。但是,我仍然需要解决无法在 Blend 中显示设计时数据的问题。从 Visual Studios 的行为来看,它应该可以工作吗?!