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