我正在使用GalaSoft的WPF和MVVM-Light库创建一个项目。我将有一个基本的抽象View Model类,它将被所有其他View Model类使用。在那里,我将MVVM-Light基类作为我的基类。但是,在这个基类中,当我尝试使用RaisePropertyChanged函数时,我收到以下错误:
非静态字段,方法或属性'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 :(得分:0)
答案 1 :(得分:0)
您只需将您的属性“Tax DescriptionStringList”声明为非静态。由于支持域(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”)),正如我在下面的代码中指出的那样< / p>
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
{ ... }