全局属性更改的对象强制转换结果为null(在C#中)

全局属性更改的对象强制转换结果为null(在C#中),c#,object,casting,inotifypropertychanged,invalidoperationexception,C#,Object,Casting,Inotifypropertychanged,Invalidoperationexception,由于全局属性发送的对象发生更改,我在初始化新变量时遇到一些问题。我有两个类BeltConfiguration和BeltProperty(两个类都有INotifyPropertyChanged)。我在BeltConfiguration类中有一个globalpropertychanged方法,如图所示 private void BeltProperty_GlobalPropertyChanged(object sender, PropertyChangedEventArgs e)

由于全局属性发送的对象发生更改,我在初始化新变量时遇到一些问题。我有两个类
BeltConfiguration
BeltProperty
(两个类都有
INotifyPropertyChanged
)。我在
BeltConfiguration
类中有一个
globalpropertychanged
方法,如图所示

        private void BeltProperty_GlobalPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            BeltProperty validBelt = sender as BeltProperty;
            if (validBelt != null)
            {
                this.Validation = validBelt.Validation;
            }
            switch (e.PropertyName)
            {
                case "Value":
                    this.Validation.ValidState = ConfigurationValid.Unknown;
                    OnPropertyChanged("Validate");
                    break;
                case "ConfigurationInvalid":
                    this.Validation.ValidState = ConfigurationValid.False;
                    OnPropertyChanged("Validate");
                    break;
            }
        }
BeltProperty
类中,我用
OnGlobalPropertyChanged(“ConfigurationInvalid”)调用它
然而,当我调用它时,无论我做什么,
validBelt
总是导致
null
。我通过单步遍历代码查看对象发送者,它表示声明方法,
GenericParametersAttributes
,和
GenericParametersPosition
引发了
System.invalidoOperationException
的异常。我不知道这是否与为什么
validBelt
不接受发件人为
BeltProperty
有关。谢谢你能给我的任何帮助或建议

这就是我在Belt属性类中调用BeltProperty_GlobalProperty Changed的地方

    private ConfigurationValidation _Validation = new ConfigurationValidation(ConfigurationValid.Unknown, "", "", null);
    /// <summary>
    /// Stores information as to wether this belt property is valid or invalid, and the details.
    /// </summary>
    internal ConfigurationValidation Validation
    {
        get { return _Validation; }
        set {

            _Validation = value;
            if(_Validation.ValidState == ConfigurationValid.False)
            {
                OnGlobalPropertyChanged("ConfigurationInvalid");
            }
        }
    }

    /// <summary>
    /// A global on property change that runs for any instantiated object of this type.
    /// </summary>
    /// <param name="name"></param>
    static void OnGlobalPropertyChanged(string name)
    {
        GlobalPropertyChanged(
            typeof(BeltProperty),
            new PropertyChangedEventArgs(name));
    }
private ConfigurationValidation\u Validation=new ConfigurationValidation(ConfigurationValid.Unknown,“,”,null);
/// 
///存储有关此传送带属性是否有效以及详细信息的信息。
/// 
内部配置验证
{
获取{return\u Validation;}
设置{
_验证=价值;
if(_Validation.ValidState==ConfigurationValid.False)
{
OnGlobalProperty已更改(“配置无效”);
}
}
}
/// 
///为该类型的任何实例化对象运行的全局on属性更改。
/// 
/// 
静态无效OnGlobalPropertyChanged(字符串名称)
{
全球财产变化(
类型(安全带属性),
新房地产变更发展目标(名称));
}

由于您在此处使用的是安全类型转换:

BeltProperty validBelt = sender as BeltProperty
当此赋值后
validBelt
null
时,意味着无法将发送方强制转换为
BeltProperty
的实例

查看调用代码,您似乎没有将
BeltProperty
的实例传递到事件处理程序中

假设
GlobalPropertyChanged
是您的
PropertyChangedEventHandler
代理将您的
OnGlobalPropertyChanged
代码更改为:

/// <summary>
/// A global on property change that runs for any instantiated object of this type.
/// </summary>
/// <param name="name"></param>
static void OnGlobalPropertyChanged(string name)
{
    GlobalPropertyChanged(
        this,
        new PropertyChangedEventArgs(name)
    );
}
//
///为该类型的任何实例化对象运行的全局on属性更改。
/// 
/// 
静态无效OnGlobalPropertyChanged(字符串名称)
{
全球财产变化(
这
新属性ChangedEventArgs(名称)
);
}