Beschreibung:
Dies ist eine Standardimplementation von INotifyPropertyChanged. Diesen Code kann man ungesehen in eine Klasse einfügen, die INotifyPropertyChanged implementieren soll und dadurch das Event schenll und sicher auslösen.
(( Der Code stammt ursprünglich nicht von mir, sonder hier aus dem Forum, leider finde ich den Thread nicht mehr und auch den uhrsprünglichen Poster. ))
#region INotifyPropertyChanged Member
/// <summary>
/// Tritt ein, wenn sich ein Eigenschaftenwert ändert.
/// </summary>
public virtual event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Prüft ob sich der alte Wert und der neu Wert unterscheiden. Wenn dies der Fall ist, wird der alte Wert überschrieben und das <see cref="E:PropertyChanged"/>-Event ausgelöst.
/// </summary>
/// <typeparam name="T">Der Typ der Werte.</typeparam>
/// <param name="propertyName">Der Name des Properties, das überprüft wird.</param>
/// <param name="oldValue">Der alte Wert, normal das vom Property gekapselte Feld.</param>
/// <param name="newValue">Der neue Wert, normal <c>value</c> des <c>set</c>-Operators des Properties.</param>
/// <returns>Giebt <c>true</c> zurück, wenn oldValue gegegen newValue ausgetauscht wurde, ansonsten <c>false</c>.</returns>
protected bool VerursachePropertyChanged<T>(string propertyName, ref T oldValue, ref T newValue)
{
if (oldValue == null && newValue == null)
{
return false;
}
if ((oldValue == null && newValue != null) || !oldValue.Equals((T)newValue))
{
oldValue = newValue;
this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
return true;
}
return false;
}
/// <summary>
/// Löst das <see cref="E:PropertyChanged"/>-Event aus.
/// </summary>
/// <param name="e">Die <see cref="System.ComponentModel.PropertyChangedEventArgs"/> enthält die Daten für das Event.</param>
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, e);
}
}
#endregion
Hier der Code, wie man die Methoden verwendet:
public T MyProperty
{
get { return this._MyProperty; }
set { VerursachePropertyChanged("MyProperty",ref this._MyProperty, ref value); }
}
Schlagwörter: INotifyPropertyChanged