2010-12-02 5 views
0

je les composants suivants dans une application WPF:WPF dégradation des performances UI Render

(1) Fenêtre

(2) ContentPresenter dans la fenêtre qui est lié à une propriété dans le ViewModel sous-jacente. Cette propriété fait référence à un autre ViewModel.

(3) Un DataTemplate pour ViewModel qui sera lié au ContentPresenter référencé ci-dessus. Ce modèle de données instancie une grille tierce qui affiche certaines données.

Chaque fois que le ContentPresenter restitue les données à partir du DataTemplate, l'interface utilisateur met environ trois à quatre secondes à s'afficher. Cela provoque le blocage de l'interface utilisateur pendant la durée nécessaire au rendu du contenu. Comme j'ai peu ou pas de contrôle sur la façon dont le contrôle tiers se rend, ma question est de savoir s'il est possible ou non de rendre le contenu d'une manière que l'interface utilisateur ne bloquera pas.

Veuillez nous aviser.

Merci.

Chris

Répondre

1

Combien de lignes la grille affiche-elle? Et combien de ces lignes sont visibles à l'écran? Je demande parce qu'il est possible que vous ayez une disposition d'interface utilisateur qui vainc la virtualisation. Généralement, les contrôles affichant une liste déroulante de données effectuent la virtualisation. (Le ListBox intégré le fait, et toute grille de qualité acceptable de tierce partie devrait faire la même chose.) Ceci est essentiel pour les performances, car cela signifie que votre interface utilisateur n'a besoin que d'instancier les éléments visibles, plutôt que tout dans votre liste.

Mais il est relativement facile de vaincre cette virtualisation par accident. Une façon consiste à envelopper la liste ou le contrôle de la grille dans un ScrollViewer. Vous avez besoin de contrôles de virtualisation pour pouvoir gérer leur propre défilement pour que la virtualisation fonctionne, de sorte que le défilement doit avoir lieu à l'intérieur. Envelopper un contrôle dans un ScrollViewer l'empêche de faire son propre défilement. Une autre façon de se tromper est de brancher un autre ItemsPanel. Une troisième possibilité est que votre contrôle de liste/grille doit être dit d'utiliser la virtualisation. Mais si vous utilisez un contrôle qui prend simplement beaucoup de temps pour afficher uniquement les éléments à afficher à l'écran, alors vous ne pouvez pas faire grand-chose - vous devez contacter le fournisseur du contrôle, ou envisager en utilisant un autre fournisseur ...

Questions connexes