2011-11-01 20 views
8

Vorrei solo alcuni suggerimenti quando voglio creare un'interfaccia utente reattiva.Suggerimenti interfaccia utente reattivo

so come usare:

Dispatcher 
Task 
BackgroundWorker 
Threads 

Cerco ulteriori suggerimenti anticipo, come punte di legame ... Quando ho 50 + controlli sulla mia interfaccia utente che ha bisogno di aggiornare.

PriorityBinding 
Populating ComboBoxes 
Populating ListBoxes, ListViews 

Nel trattare i dati in background ... Le migliori pratiche forse quando si tratta di lungo proccess esecuzione.

Cos'altro posso fare per rendere l'interfaccia utente 100% reattiva.

risposta

16
  1. FastObservableCollection

  2. Manipolazione PresentationSource

  3. Uso PLinq o Linq su più thread utilizzando AsQueryable() per il filtraggio dinamico delle fonti di dati rispetto a singolo thread e filo agnostico CollectionView.

  4. Readymade Gifs sopra animazione

  5. Vitualization di pannelli non virtualizzati come la tela

  6. differite scorrimento

  7. Trigger.Exnter \ Exit azioni per le animazioni.

  8. BeginStoryboard.HandoffBehavior = "comporre"

  9. utilizzando hardware sopra accelerazione software.

  10. Evitando WindowStyle=None, AllowTransparency=true, Background=Transparent, TileMode

  11. Configurare RenderOptions.BitmpaScalingMode come scarsa qualità e di e attivare la cache. Abilita il servizio Windows PresentationFontCache.

  12. Usa Staticresources oltre Dynamicresources

  13. Evitare di proprietà di dipendenza ereditabili. Evita anche le operazioni pesanti nella proprietà cambiate le richiamate.

  14. Utilizzare i pennelli Freezable. Evitare x:Name/Namescoping/Binding al loro Color le proprietà per essere sempre congelabili.

  15. Impostare lo sfondo del bordo, se incapsula un'immagine piuttosto che impostare lo sfondo della vista. Simile è se hai impostato uno Brush come sfondo di un visual quindi specificare Brush.Opacity rispetto a Visual.Opacity.

  16. I convertitori di valore devono avere un codice minimale. utilizzare Binding.IsAsync e PriorityBinding dove applicabile.

  17. Utilizzare Expanders con IsExpanded=False per impostazione predefinita.

  18. CompositionTarget.Rendering si attiva in ogni ciclo di rendering, pertanto deve essere utilizzato solo se necessario. Rileggilo su ogni occasione.

  19. WPF DataGrid dovrebbero evitare l'uso pesante di colonne ComboBox e colonne modello modificabile, come i modelli combobx cercano di caricare il valore selezionato e utilizzare il percorso membro display in realtà la ricerca dalla elementi fonte di ogni ComboBox e template colonne perdita quando utilizzato con collezioni altamente osservabili.

  20. Utilizzare gli effetti Shader basati su Tooklit con WPF e le nuove API Pixel Shader come Sfocatura, Ombra.

e molti altri ...

+0

Molto utile. Thx Angel. =) – Willem

+0

Eventualmente disattivando tutti i migliori elementi grafici e rendi l'app simile all'app vecchio stile win 32 :) –

0

Più di 50 controlli su una singola UI sembrano essere stati progettati da un programmatore e l'ottimizzazione del codice probabilmente compenserà il problema reale per un po '. La cosa migliore per accelerare è quella di separare le funzionalità su schermi diversi o nascondere le informazioni meno utilizzate dietro i menu.

1

ho sempre trovato lazy loading molto utile per evitare che grandi quantità di dati corso di caricamento in una sola volta, che è dove la maggior parte del tempo di avvio va durante la manipolazione di grandi quantità di dati. Associa i tuoi record ai controlli degli elementi virtualized, per ridurre al minimo l'ingombro della memoria (ovviamente WPF è il tuo giudice su ciò che è necessario in memoria).

Ma ad essere onesti: Martin è giusto ... 50 + controlli databound, ... l'uomo, che è freakin' inferno ;-)

e la vostra ricerca per il 100% di risposta, immagino, ha bisogno di ulteriori spiegazione. A mio modo di vedere, le applicazioni possono essere reattive o meno (prendere input dell'utente/produrre output o rimanere bloccati senza fare nulla). Miri alle migliori prestazioni? O si tratta di uno scenario di tipo rowlocking che stai affrontando (lasciare che l'utente modifichi altri record durante l'esecuzione di attività lunghe su determinati record)?

Penso che un po 'di ciò che AngelWPF ha menzionato possa essere trovato in this neat article sul binding prioritario.

+0

Sì, 50+ controlli sembrano assegnati, ma sono tutti ugualmente importanti. La parte che impiega il tempo più lungo è il binding per la fonte dell'oggetto nelle mie combo ... Ma il caricamento iniziale della Form (View) richiede molto tempo. Voglio il form up veloce e poi il resto dei binding può succedere o qualcosa del genere. Quando l'utente fa clic sul menu a discesa che richiede molto tempo per l'apertura, a causa della grande quantità di dati ... Quindi sono un po 'bloccato – Willem

+1

OK, se è un aiuto, controlla le informazioni in questo post: http://blogs.msdn.com/b/jgoldb/archive/2007/10/10/improving-wpf-applications-startup-time.aspx. –

Problemi correlati