Aktualisieren eines PropertyGrids

8

Wie kann ich ein Eigenschaftsraster automatisch aktualisieren, wenn sich das Objekt in seiner SelectedObject-Eigenschaft ändert? Ich habe versucht, INotifyPropertyChanged in meiner Klasse zu implementieren, aber das Eigenschaftenraster zeigt die neuen Eigenschaften des Objekts im Hintergrund erst an, wenn ich darauf klicke.

Ich habe versucht, das PropertyChanged-Ereignis meines Objekts direkt zu abonnieren und die Refresh () -Methode des PropertyGrids aufzurufen, wenn es envokiert wird. Aber einige meiner Eigenschaften sind verwandt. Das Ändern einer Eigenschaft kann mehrere PropertyChanged-Ereignisse hervorrufen. Dies scheint gut zu funktionieren, aber ich frage mich immer noch, ob es eine sauberere Möglichkeit gibt, dies durch DataBinding zu tun. Außerdem möchte ich vermeiden, dass das Steuerelement mehrmals aktualisiert wird, nachdem der Benutzer nur eine einzelne Eigenschaft aktualisiert hat.

Gibt es also eine Möglichkeit, das PropertyGrid von PropertyChanged-Ereignissen zu aktualisieren?

    
Eric Anastas 25.06.2010, 18:32
quelle

2 Antworten

0

Ich weiß nicht, ob es eine eingebaute Methode gibt, aber hier ist ein Vorschlag, wenn Sie mehrere Aufrufe von Refresh für verwandte Eigenschaften vermeiden möchten:

Wenn ein Ereignis PropertyChanged auftritt, starten Sie einen Timer. Wenn das Ereignis erneut auftritt, bevor der Timer abgelaufen ist, tun Sie nichts. Aktualisieren Sie im Ereignis Tick des Timers PropertyGrid und stoppen Sie den Timer

    
Thomas Levesque 25.06.2010, 19:38
quelle
31

Fügen Sie das Attribut RefreshProperties zu jeder Eigenschaft hinzu, die Abhängigkeiten aufweist:

%Vor%

Jedes Mal, wenn sich diese Eigenschaft ändert, werden die anderen Felder automatisch aktualisiert. Dies ist ein viel sauberer Ansatz, als jedes Mal das "Refresh ()" des Property-Grids aufzurufen.

    
Nissim 10.02.2011 10:04
quelle