8

Come posso avere un aggiornamento della griglia di proprietà automaticamente quando l'oggetto nella sua proprietà SelectedObject cambia? Ho provato a implementare INotifyPropertyChanged nella mia classe, ma la griglia delle proprietà in realtà non mostra i nuovi propertyies dell'oggetto in background finché non faccio clic su di esso.Aggiornamento di un PropertyGrid

Ho provato ad iscrivermi direttamente all'evento PropertyChanged del mio oggetto e a chiamare il metodo Refresh() del PropertyGrid quando viene invocato. Ma alcune delle mie proprietà sono correlate. Il significato della modifica di una proprietà può evocare più eventi PropertyChanged. Questo sembra funzionare bene, ma mi sto ancora chiedendo se c'è un modo più pulito di farlo attraverso DataBinding. Inoltre vorrei evitare di avere il controllo Aggiorna più volte dopo che l'utente ha aggiornato solo una singola proprietà.

Quindi c'è un modo per ottenere il PropertyGrid per l'aggiornamento da eventi PropertyChanged?

risposta

0

Non so se c'è un modo integrato di farlo, ma ecco un suggerimento, se si vuole evitare di più chiamate a Refresh per immobili correlati:

Quando si verifica un evento PropertyChanged, avviare un timer . Se l'evento si verifica nuovamente prima che il timer sia trascorso, non fare nulla. In Tick evento del timer, aggiornare la PropertyGrid e interrompere il timer

+0

So che questa risposta ha due anni, ma ho avuto la stessa domanda dell'OP e voglio aggiungere a questa risposta che Timer ha una proprietà AutoReset. Significa che non devi fermare il timer manualmente. :-) –

31

Provate ad aggiungere la RefreshProperties attribuiscono a ogni proprietà che ha dipendenze:

[RefreshProperties(RefreshProperties.All)] 

Ora, ogni volta che questa proprietà cambia - si aggiorna automaticamente gli altri campi. Questo è un approccio molto più pulito che chiamare "Aggiorna()" della griglia di proprietà ogni volta.

+0

Ottimo! Perché questa non è una risposta accettata? – Dennis

+0

Perché è stato pubblicato circa 8 mesi di ritardo. – flarn2006

+1

** Risolto quasi tutti i problemi. ** 'InotifyPropertyChanged' richiede più controlli di attivazione mentre questo ordinamento di tipo' RefreshProperties 'ignora tutto (più lentamente, sembra sulla mia macchina ma sembra non riuscire mai) Grazie! –