2012-03-16 83 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 
    { ... }