WP8プロジェクトを自作のMVVM実装からMVVMLightに調整しようとしています。私はこの例をうまくやり遂げました、そしてそれは完璧に働きました。その後、自分のプロジェクトで同じ手順を繰り返し始めました。
アプリケーションはエラーなしでコンパイルされますが、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: VisualStudioでデザイン時間を表示することができました。コードビハインドファイルでDataContextを手動で参照していました。ただし、Blendで設計時データを表示できないという問題を解決する必要があります。Visual Studioの動作から判断すると、動作するはずです。