Entwickler-Ecke

WinForms - Textfarbe neu zeichen


Delete - Mi 24.08.16 13:01
Titel: Textfarbe neu zeichen
- Nachträglich durch die Entwickler-Ecke gelöscht -


C# - Mi 24.08.16 13:39

Ich bin mir nicht sicher wie der Designer das macht, aber erzeugt er nicht ein komplett neues ColumnSettings Objekt und weißt dieses dann der ListView zu? Somit hast du nämlich das Problem, dass wenn deine ColumnSettings Eigenschaft neu gesetzt wird, der Eventhandler nicht geupdated wird. Dieser reagiert nämlich nur auf die Instanz, die du in der ListView erzeugst. Ich würde mal probieren für die ColumnSettings Eigenschaft ein backing field zu erzeugen und dann in der setter Funktion das propertychanged Event des neuen Objekts zu abonnieren.


Delete - Mi 24.08.16 15:42

- Nachträglich durch die Entwickler-Ecke gelöscht -


Palladin007 - Mi 24.08.16 16:16

Wichtig:

Wenn Du das im Setter machst, dann achte darauf, dass 1. ein eventuell vorher registrierter PropertyChangedHandler deregistriert wird und 2. der neue Handler nur registriert wird, wenn das Objekt nicht null ist.
Mag sein, dass das in deinem aktuellen Fall nicht auf tritt, aber für die Zukunft solltest Du das beachten.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
private ColumnSettings _columnSettings;
public ColumnSettings ColumnSetting 
{
    get { return _columnSettings; }
    set 
    {
        if (ColumnSetting != null)
            ColumnSetting.PropertyChanged -= ColumnSettings_PropertyChanged;

        _columnSettings = value;

        if (ColumnSetting != null)
            ColumnSetting.PropertyChanged += ColumnSettings_PropertyChanged;
    } 
}


Wenn ColumnSettings nie null sein darf, dann kannst Du ja noch einen Check value == null einbauen und/oder das Prüfen auf null vor dem EventHandler registrieren/deregistrieren entfernen.
Wichtig ist nur, dass die Property im Konstruktor dann auch einen Wert bekommt.


Delete - Mi 24.08.16 16:48

- Nachträglich durch die Entwickler-Ecke gelöscht -