-1

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)); 
    } 

Répondre

0

Puisque vous utilisez une distribution en sécurité ici:

BeltProperty validBelt = sender as BeltProperty 

Lorsque validBelt est null après cette affectation, il signifie que l'expéditeur ne peut pas être jeté à une instance de BeltProperty.

En regardant votre indicatif, il semble que vous ne transmettiez pas une instance de BeltProperty dans votre gestionnaire d'événements.

En supposant GlobalPropertyChanged est votre PropertyChangedEventHandler délégué changer votre code OnGlobalPropertyChanged à ceci:

/// <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) 
    ); 
} 
+0

Hey ça a marché! Merci pour l'aide. Changer ce GlobalPropertyChanged est ce que je devais faire. – andrewvb