2013-04-11 61 views
0

我正在嘗試爲MVVMLight WPF重新配置MVVMLight SL5應用程序。
我想我已經連接了所有正確的GalaSoft庫,但是在啓動時,我得到了標題中顯示的異常。
它得到的視圖模型時的MainPage發生ViewModelLocator:「'MainViewModel'類型必須派生自DependencyObject」

public MainViewModel Main 
    { 
     get 
     { 
      MainViewModel mvm = null; 
      try 
      { 
       mvm = ServiceLocator.Current.GetInstance<MainViewModel>(); 
      } 
      catch (Exception xx) 
      { 
       System.Diagnostics.Debug.WriteLine(xx.Message); 
      } 
      return mvm; 
     } 
    } 

唯一的例外來自的GetInstance()調用。
MainPage從Window派生; DataContext在xaml中設置。

DataContext="{Binding Main, Source={StaticResource Locator}}" 

上什麼錯誤,將不勝感激.... (靶向.NET 4.5,GalaSoft WPF4庫v4.0.30319)

+0

這通常來自於嘗試在不繼承DependencyObject的類型上註冊依賴項屬性。檢查完整的堆棧跟蹤(包括內部異常,遞歸),它應該引導您解決問題。 – 2013-04-11 19:45:06

+0

感謝您的回覆,d.k.{System.Reflection.TargetInvocationException} + _innerException \t {「異常已被調用的目標引發。」} {System.Reflection.TargetInvocationException異常已被調用的目標拋出。 } + _innerException \t { 「關於 'IRUploader.ViewModel.MainViewModel' 的類型初始引發了異常。」} {System.TypeInitializationException} + _innerException { 「 'MainViewModel' 類型必須自DependencyObject派生。」}中MainViewModel構造函數 斷點從未被擊中。 MainViewModel派生自MVVMLight ViewModelBase。 – Number8 2013-04-11 23:21:01

+0

我不希望一個構造函數斷點被打 - 問題可能是像'公共靜態只讀DependencyProperty x = DependencyProperty.Register(...)' – 2013-04-12 03:22:36

回答

5

當註冊依賴項屬性時,ownerType必須繼承任何提示DependencyObject,其中MainViewModel沒有。

但是,鑑於您使用的是MVVM Light,並且該屬性被稱爲「UserName」,因此我建議不要使用依賴屬性。相反,使用INotifyPropertyChanged的常規屬性。 MVVM燈中的ViewModelBaseRaisePropertyChanged可以幫助您解決這個問題。

依賴項屬性通常用於用戶控件。對於綁定視圖模型的數據,INPC通常是要走的路。

+0

「註冊依賴屬性時,ownerType必須從DependencyObject繼承,而MainViewModel不支持該屬性。」 感謝您的解釋,現在有道理。 – Number8 2013-04-12 18:12:31

相關問題