myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Standardimplementation von INotifyPropertyChanged
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Standardimplementation von INotifyPropertyChanged

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
JuyJuka JuyJuka ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2316.jpg


Dabei seit: 30.11.2005
Beiträge: 2.187
Entwicklungsumgebung: VS2015
Herkunft: Deutschland


JuyJuka ist offline

Standardimplementation von INotifyPropertyChanged

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

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. ))

C#-Code:
    #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:

C#-Code:
public T MyProperty
{
  get { return this._MyProperty; }
  set { VerursachePropertyChanged("MyProperty",ref this._MyProperty, ref value); }
}

Schlagwörter: INotifyPropertyChanged


Dateianhang:
zip inotifypropertychanged.snippet.zip (1,10 KB, 260 mal heruntergeladen)

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von JuyJuka am 12.12.2008 13:41.

11.12.2008 21:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
kleines_eichhoernchen kleines_eichhoernchen ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2079.jpg


Dabei seit: 07.11.2006
Beiträge: 3.971
Entwicklungsumgebung: Visual Studio 2005 (C#)
Herkunft: Ursprünglich Vogtland, jetzt Much


kleines_eichhoernchen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo JuyJuka,
Wobei noch zu sagen wäre, dass die Überladung der Funktion OnPropertyChanged(string) zur einfacheren Handhabung von OnPropertyChanged führt.

C#-Code:
protected void OnPropertyChanged(string propertyName) {
  this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
12.12.2008 08:49 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JuyJuka JuyJuka ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2316.jpg


Dabei seit: 30.11.2005
Beiträge: 2.187
Entwicklungsumgebung: VS2015
Herkunft: Deutschland

Themenstarter Thema begonnen von JuyJuka

JuyJuka ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo kleines_eichhoernchen,

Diese Überladung sollte ich noch einfügen, ist wirklich nützlich.
Jedoch hat die VerursachePropertyChanged-Methode noch einen großen Vorteil dieser überladung gegenüber: Sie Prüft selbstständig ob das Event ausgelöst werden muss oder nicht.

Gruß
Juy Juka
12.12.2008 10:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Codi++ Codi++ ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.07.2008
Beiträge: 3


Codi++ ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

es macht zwar keinen großen Unterschied, aber wäre

C#-Code:
protected bool VerursachePropertyChanged<T>(string propertyName, ref T oldValue, T newValue)

nicht sinnvoller. Außerdem erspart es einem jedesmal vier Tasten ;)
25.12.2008 13:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JuyJuka JuyJuka ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2316.jpg


Dabei seit: 30.11.2005
Beiträge: 2.187
Entwicklungsumgebung: VS2015
Herkunft: Deutschland

Themenstarter Thema begonnen von JuyJuka

JuyJuka ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi Codi++,

Jup, könnte man machen.
Ich hab keine Einwände, wenn jemand eine Modifizierte Version des Snipptes Postet.

Gruß
Juy Juka
29.12.2008 20:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Jahre.
Der letzte Beitrag ist älter als 8 Jahre.
Antwort erstellen


© Copyright 2003-2017 myCSharp.de-Team. Alle Rechte vorbehalten. 19.08.2017 00:02