-1

Ich habe Probleme mit der Initialisierung einer neuen Variablen, da das Objekt, das von der globalen Eigenschaft gesendet wird, geändert wurde. Ich habe zwei Klassen BeltConfiguration und BeltProperty (beide Klassen haben INotifyPropertyChanged). Ich habe eine globalpropertychanged Methode in der BeltConfiguration Klasse wie hier zu sehen.Globale Eigenschaft Geändertes Objekt, das Ergebnisse in null (in C#) wirft

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

In der BeltProperty Klasse, nenne ich dies mit OnGlobalPropertyChanged("ConfigurationInvalid"); Allerdings, wenn ich es nennen, egal was ich tue, validBelt führt immer zu null zu sein. Ich schaute auf den Absender des Objekts, indem ich durch den Code schritt und es sagt, dass die Deklarationsmethode, , und GenericParametersPosition eine Ausnahme von System.InvalidOperationException warf. Ich weiß nicht, ob das etwas damit zu tun hat, warum validBelt Absender nicht als BeltProperty akzeptiert. Danke für jede Hilfe oder Ratschläge, die Sie mir geben können.

Hier habe ich BeltProperty_GlobalPropertyChanged in der Belt-Eigenschaft-Klasse aufgerufen.

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

Antwort

0

Da Sie eine sichere Besetzung hier verwenden:

BeltProperty validBelt = sender as BeltProperty 

Wenn validBeltnull nach dieser Zuordnung ist es bedeutet, Absender kann nicht auf eine Instanz von BeltProperty gegossen werden.

Wenn Sie Ihren aufrufenden Code betrachten, sieht es so aus, als ob Sie keine Instanz BeltProperty in Ihren Event-Handler übergeben.

Unter der Annahme, GlobalPropertyChanged ist Ihr PropertyChangedEventHandler delegieren Ihre OnGlobalPropertyChanged Code dies ändern:

/// <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 es funktionierte! Danke für die Hilfe. Das Ändern von GlobalPropertyChanged war das, was ich tun musste. – andrewvb

Verwandte Themen