全局属性更改的对象强制转换结果为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(名称)
);
}