Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将基本视图模型类与GalaSoft MVVM Light一起使用_Mvvm_Viewmodel_Mvvm Light - Fatal编程技术网

将基本视图模型类与GalaSoft MVVM Light一起使用

将基本视图模型类与GalaSoft MVVM Light一起使用,mvvm,viewmodel,mvvm-light,Mvvm,Viewmodel,Mvvm Light,我正在使用GalaSoft的WPF和MVVM Light库创建一个项目。我将有一个基础抽象视图模型类,它将被实现的所有其他视图模型类使用。在那里,我将有MVVM轻型基类作为我的基类。但是,在这个基类中,当我尝试使用RaisePropertyChanged函数时,我得到以下错误: 非静态字段、方法或属性“GalaSoft.MvvmLight.ViewModelBase.RaisePropertyChanged(string)”需要对象引用 代码如下所示: AnalysisViewModelBase

我正在使用GalaSoft的WPF和MVVM Light库创建一个项目。我将有一个基础抽象视图模型类,它将被实现的所有其他视图模型类使用。在那里,我将有MVVM轻型基类作为我的基类。但是,在这个基类中,当我尝试使用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
{ ... }
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
{ ... }