Je rencontre des problèmes lors de l'initialisation d'une nouvelle variable lorsque l'objet envoyé par la propriété globale est modifié. J'ai deux classes BeltConfiguration
et BeltProperty
(les deux classes ont INotifyPropertyChanged
). J'ai une méthode globalpropertychanged
dans la classe BeltConfiguration
comme vu ici.Propriété globale La conversion des objets modifiés en null (en 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;
}
}
Dans la classe BeltProperty
, j'appelle cela avec OnGlobalPropertyChanged("ConfigurationInvalid");
Cependant, quand je l'appelle, peu importe ce que je fais, validBelt
résultats toujours être null
. J'ai regardé l'expéditeur d'objet en faisant un pas à travers le code et il dit que la méthode de déclaration, GenericParametersAttributes
, et GenericParametersPosition
a jeté une exception de System.InvalidOperationException
. Je ne sais pas si cela a quelque chose à voir avec pourquoi validBelt
n'acceptera pas l'expéditeur comme BeltProperty
. Merci pour toute aide ou conseil que vous pouvez me donner.
C'est ici que j'ai appelé BeltProperty_GlobalPropertyChanged dans la classe Belt Property.
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));
}
Hey ça a marché! Merci pour l'aide. Changer ce GlobalPropertyChanged est ce que je devais faire. – andrewvb