我在初始化新变量时遇到了一些麻烦,因为由全局属性发送的对象发生了更改。我有两个类BeltConfiguration
和BeltProperty
(两个类都有INotifyPropertyChanged
)。如在此处所示,我在BeltConfiguration
课程中有globalpropertychanged
方法。全局属性更改对象投射结果为空(在C#中)
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.InvalidOperationException
的例外。我不知道这是否与validBelt
不接受发件人为BeltProperty
有什么关系。感谢您提供的任何帮助或建议。
这是我在Belt Property类中调用BeltProperty_GlobalPropertyChanged的地方。
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));
}
嘿它的工作!谢谢您的帮助。改变GlobalPropertyChanged是我需要做的。 – andrewvb