2012-02-09 24 views
4

私はNinjectでMVVM Light V4を使用しています。私のViewModelファイルは別々のアセンブリにあります。これは、ViewModelLocatorが開始アセンブリ(ビューファイル)にあるときに効果的です。ブレンド機能は機能します。MVVM Light ViewModelLocatorは別のアセンブリですか?デザインタイムモードの問題

私はViewModelアセンブリにViewModelLocatorを配置したいのですが、それを行うと、ブレンド可能性が失われています。その後、起動したアプリケーションでのみ正しく動作します(設計時モードではない)。

ViewModelLocator:

static ViewModelLocator() 
    { 
     ServiceLocator.Initialize(); 

     if (ViewModelBase.IsInDesignModeStatic) 
     { 
      using (var module = new DesignBindingsModule()) 
      { 
       ServiceLocator.Load(module); 
      } 
     } 
     else 
     { 
      using (var module = new DefaultBindingsModule()) 
      { 
       ServiceLocator.Load(module); 
      } 
     } 
    } 

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", 
     "CA1822:MarkMembersAsStatic", 
     Justification = "This non-static member is needed for data binding purposes.")] 
    public IMainWindowViewModel MainWindow 
    { 
     get 
     { 
      return ServiceLocator.Get<IMainWindowViewModel>(); 
     } 
    } 

それは別のアセンブリでViewModelLocatorを入れて、設計時モードでそれにバインドすることは可能ですか?

+1

デザイナーに問題があるときに私がすることは、どのコードが実行されているかを見るために例外をスローすることです。例えば、 'ServiceLocator.Get ()の戻り値を見たいと思うかもしれません。 ' ServiceLocator.Get ()をスローします。ToString()または何か.. –

+0

あなたは答えとしてそれを提出し、受け入れまたは削除する必要があります.. –

答えて

0

問題を解決しました。コードにバグがありました。 ServiceLocatorが2回初期化され、適切なバインディングができない例外がスローされました。それはデザイナーでのみ発生し、デザイナーは例外を表示しないことは奇妙です。私はリファクタリングコードと問題が消えた。私はViewModel相対クラスをすべて別のアセンブリに持っています。

関連する問題