将基本视图模型类与GalaSoft MVVM Light一起使用
我正在使用GalaSoft的WPF和MVVM Light库创建一个项目。我将有一个基础抽象视图模型类,它将被实现的所有其他视图模型类使用。在那里,我将有MVVM轻型基类作为我的基类。但是,在这个基类中,当我尝试使用RaisePropertyChanged函数时,我得到以下错误: 非静态字段、方法或属性“GalaSoft.MvvmLight.ViewModelBase.RaisePropertyChanged(string)”需要对象引用 代码如下所示:将基本视图模型类与GalaSoft MVVM Light一起使用,mvvm,viewmodel,mvvm-light,Mvvm,Viewmodel,Mvvm Light,我正在使用GalaSoft的WPF和MVVM Light库创建一个项目。我将有一个基础抽象视图模型类,它将被实现的所有其他视图模型类使用。在那里,我将有MVVM轻型基类作为我的基类。但是,在这个基类中,当我尝试使用RaisePropertyChanged函数时,我得到以下错误: 非静态字段、方法或属性“GalaSoft.MvvmLight.ViewModelBase.RaisePropertyChanged(string)”需要对象引用 代码如下所示: AnalysisViewModelBase
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
{ ... }
AnalysisViewModelBase:ViewModelBase
{
公共常量字符串TagDescriptionStringListPropertyName=“TagDescriptionStringList”;
受保护的静态列表m_tagDescriptionStringList;
公共静态列表TagDescriptionStringList
{
得到
{返回m_tagDescriptionStringList;}
设置
{
if(m_tagDescriptionStringList==值)
返回;
m_tagDescriptionStringList=值;
RaisePropertyChanged(TagDescriptionStringListPropertyName);
}
}
受保护的AnalysisViewModelBase()
{
m_tagDescriptionStringList=新列表();
m_tagDescriptionStringList.AddRange(新字符串[]{“北位置”、“东位置”、“深度”});
}
}
另一个ViewModel:AnalysisViewModelBase
{ ... }
有人能帮我理解RaisePropertyChanged函数的错误吗?您正在尝试从静态方法访问非静态方法。。。它没有访问此值的权限,您必须使您的方法非静态 如果你想更好地理解为什么你不能做你想做的事情,这里有一个解释静态方法的网页
您只需将您的财产“税务说明”声明为非静态。因为backingfield
(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
{ ... }
类分析ViewModelBase:ViewModelBase
{
公共常量字符串TagDescriptionStringListPropertyName=“TagDescriptionStringList”;
受保护的静态列表m_tagDescriptionStringList;
公共列表标记描述符字符串
{
得到
{返回m_tagDescriptionStringList;}
设置
{
if(m_tagDescriptionStringList==值)
返回;
m_tagDescriptionStringList=值;
RaisePropertyChanged(TagDescriptionStringListPropertyName);
}
}
受保护的AnalysisViewModelBase()
{
m_tagDescriptionStringList=新列表();
m_tagDescriptionStringList.AddRange(新字符串[]{“北位置”、“东位置”、“深度”});
}
}
另一个ViewModel: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
{ ... }
类分析ViewModelBase:ViewModelBase
{
公共常量字符串TagDescriptionStringListPropertyName=“TagDescriptionStringList”;
受保护的静态列表m_tagDescriptionStringList;
公共静态列表TagDescriptionStringList
{
得到
{返回m_tagDescriptionStringList;}
设置
{
if(m_tagDescriptionStringList!=值)
{
m_tagDescriptionStringList=值;
}
}
}
受保护的AnalysisViewModelBase()
{
m_tagDescriptionStringList=新列表();
m_tagDescriptionStringList.AddRange(新字符串[]{“北位置”、“东位置”、“深度”});
RaisePropertyChanged(“TagDescriptionStringList”);
}
}
另一个ViewModel:AnalysisViewModelBase
{ ... }