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.Aktualisieren eines PropertyGrid

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?

Antwort

0

Ich weiß nicht, ob es eine eingebaute Möglichkeit, es zu tun, aber hier ist ein Vorschlag, wenn Sie mehrere Anrufe Refresh für verwandte Eigenschaften vermeiden wollen:

Wenn ein PropertyChanged Ereignis auftritt, starten einen Timer . Wenn das Ereignis erneut auftritt, bevor der Timer abgelaufen ist, tun Sie nichts. Im Tick Ereignisse des Timers, die PropertyGrid neu geladen und die Timer

+0

Ich weiß, diese Antwort ist zwei Jahre alt, aber ich hatte die gleiche Frage wie das OP und ich möchte zu dieser Antwort hinzufügen, dass Timer eine AutoReset-Eigenschaft hat. Das heißt, Sie müssen den Timer nicht manuell anhalten. :-) –

31

Versuchen zu stoppen Hinzufügen der RefreshProperties zu jeder Eigenschaft zuzuschreiben, die Abhängigkeiten hat:, Jedes Mal wenn diese Eigenschaft ändert Jetzt

[RefreshProperties(RefreshProperties.All)] 

- es wird automatisch aktualisiert die anderen Felder. Dies ist ein viel sauberer Ansatz als das "Refresh()" des Property-Grids jedes Mal aufzurufen.

+0

Großartig! Warum ist das keine akzeptierte Antwort? – Dennis

+0

Weil es etwa 8 Monate zu spät veröffentlicht wurde. – flarn2006

+1

** Fast alle Probleme gelöst. ** 'INotifyPropertyChanged' erfordert mehrere Auslösungsprüfungen, während diese 'RefreshProperties'-Sortierung tatsächlich all das umgeht (langsamer, es scheint auf meinem Rechner zu sein, scheint aber nie zu versagen) Danke! –