2012-03-16 81 views
0

我使用GalaSoft的WPF和MVVM-Light库创建项目。我将有一个基本的抽象视图模型类,它将被所有实现的其他视图模型类使用。在那里,我将有MVVM-Light基类作为我的基类。但是,在这个基类中,当我尝试使用RaisePropertyChanged函数时,出现以下错误:使用GalaSoft MVVM Light的基本视图模型类

对象引用对于非静态字段,方法或属性'GalaSoft.MvvmLight.ViewModelBase.RaisePropertyChanged(string )”

的代码看起来就像这样:

AnalysisViewModelBase : ViewModelBase 
{ 
    public const string TagDescriptionStringListPropertyName = "TagDescriptionStringList"; 

    protected static List<string> m_tagDescriptionStringList; 

    public static List<string> TagDescriptionStringList 
    { 
     get 
     { return m_tagDescriptionStringList; } 
     set 
     { 
      if (m_tagDescriptionStringList == value) 
       return; 

      m_tagDescriptionStringList = value; 

      RaisePropertyChanged(TagDescriptionStringListPropertyName); 
     } 

    } 
    protected AnalysisViewModelBase() 
    { 
     m_tagDescriptionStringList = new List<string>(); 

     m_tagDescriptionStringList.AddRange(new string[] { "North Position", "East Position", "Depth" }); 
    } 
} 

AnotherViewModel : AnalysisViewModelBase 
{ ... } 

任何人都可以请帮助我了解什么是错的我RaiseProperyChanged功能?

回答

0

您正试图从静态方法访问非静态方法...它无法访问此值,您必须使您的方法不是静态的。

这里是一个网页,介绍静态方法,如果你想更好地理解为什么你不能做你想做的事情。

Link

0

您只需必须声明你的财产 “税收DescriptionStringList” 非静态的。由于backfield (m_tagDescriptionStringList)是静态的,它仍然是一样的。使此:

class AnalysisViewModelBase : ViewModelBase 
{ 
    public const string TagDescriptionStringListPropertyName = "TagDescriptionStringList"; 

    protected static List<string> m_tagDescriptionStringList; 

    public List<string> TagDescriptionStringList 
    { 
     get 
     { return m_tagDescriptionStringList; } 
     set 
     { 
      if (m_tagDescriptionStringList == value) 
       return; 

      m_tagDescriptionStringList = value; 

      RaisePropertyChanged(TagDescriptionStringListPropertyName); 
     } 
    } 

    protected AnalysisViewModelBase() 
    { 
     m_tagDescriptionStringList = new List<string>(); 

     m_tagDescriptionStringList.AddRange(new string[] { "North Position", "East Position", "Depth" }); 
    } 
} 

AnotherViewModel : AnalysisViewModelBase 
{ ... } 

如果它是绝对必要的财产保持在这种情况下,静态属性,这里是一个解决方案:提高属性更改(使用RaisePropertyChanged(“TagDescriptionStringList”))当它发生时,如我在下面的代码中注明了

class AnalysisViewModelBase : ViewModelBase 
    { 
     public const string TagDescriptionStringListPropertyName = "TagDescriptionStringList"; 

     protected static List<string> m_tagDescriptionStringList; 

     public static List<string> TagDescriptionStringList 
     { 
      get 
      { return m_tagDescriptionStringList; } 
      set 
      { 
       if (m_tagDescriptionStringList != value) 
       { 
        m_tagDescriptionStringList = value; 
       } 
      } 
     } 

     protected AnalysisViewModelBase() 
     { 
      m_tagDescriptionStringList = new List<string>(); 

      m_tagDescriptionStringList.AddRange(new string[] { "North Position", "East Position", "Depth" }); 

      RaisePropertyChanged("TagDescriptionStringList"); 

     } 
    } 

    AnotherViewModel : AnalysisViewModelBase 
    { ... }