2013-04-11 370 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