2012-02-09 47 views
4

我正在使用MVVM Light V4與Ninject。我的ViewModel文件在單獨的程序集中。當ViewModelLocator在啓動程序集(View文件)中時,它工作得很好。可混合性起作用。獨立程序集中的MVVM Light ViewModelLocator?設計時間模式問題

我想將ViewModelLocator放在ViewModel程序集中,但是當我這樣做時,我失去了可混合性。之後,它只能在啓動的應用程序中正常工作(而不是在設計時間模式下)。

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()或其他.. – 2012-02-09 18:37:35

+0

你應該提交它作爲答案並接受或刪除.. – 2012-02-11 06:37:46

回答

0

問題已解決。我有一個代碼錯誤。 ServiceLocator被初始化了兩次,並拋出一個異常,無法正確綁定。奇怪的是它只發生在設計師身上,而設計師並沒有表現出異常。我重構了代碼,問題消失了。我將所有ViewModel相對類放在單獨的程序集中。