2010-04-16 9 views
1

J'essaie de construire une application pour travailler avec Twitter comme site, et le problème que j'essaie de résoudre est - Comment vais-je mettre à jour l'interface utilisateur avec un fond travailleur et seulement ajouter afficher les derniers messages (tweets si vous voulez) sur le panneau de retour sans enlever ceux qui existent déjà? Dans ma tentative précédente, je l'ai fait en stockant les tweets/posts dans une base de données SQlite locale, puis en récupérant les 10 derniers messages qui provoquent le gel de l'interface utilisateur et rechargent tous les messages.C# 4.0 .net 4 et WPF UI mise à jour

Des idées?

Répondre

5

Puisque vous utilisez WPF, c'est assez facile. Il suffit de stocker vos "messages" dans un ObservableCollection<T>. Vous pouvez alors simplement Insert le nouvel élément au début de la liste. Si vous avez lié ceci à un contrôle ItemsCollection, WPF va gérer tout redessiner correctement pour vous.

À moins que vous ayez BEAUCOUP d'éléments, cela fonctionnera plutôt bien et sera assez rapide. Je l'essayerais d'abord (puisque c'est vraiment facile à implémenter), et j'essayerai seulement d'être plus "intelligent" si vous trouvez qu'il a des problèmes de performance. Je doute cependant que vous ayez des problèmes, à condition que vous utilisiez les collections appropriées, car la liaison de données de WPF à ObservableCollection est assez rapide.

+0

c'est une très bonne solution, mais dans ma situation je dois mettre à jour un panneau de pile avec un contrôle personnalisé et je ne trouve pas comment lier la collection au panneau de pile et ensuite mettre à jour le panneau de pile avec le contrôle personnalisé – Aviatrix

+0

ListView au lieu d'un StackPanel. Il va se comporter de manière très similaire, mais "juste travailler" –

0

Utiliser la liaison de données. Les éléments de l'interface utilisateur sont databound aux champs d'un enregistrement dans une collection. Le panneau de plusieurs lignes doit être un ItemCollection de quelque sorte - Listbox, très probablement - afin qu'il réplique le modèle de données d'élément pour chaque ligne dans la collection de données sous-jacente. Ensuite, l'interface utilisateur suivra les modifications apportées à la collection sous-jacente si la collection implémente INotifyCollectionChanged. Si vous utilisez une collection en mémoire, vous pouvez simplement ajouter de nouvelles données en haut de la collection (Insérer à l'index 0) et cela repoussera tous les anciens éléments dans l'affichage de l'interface utilisateur. Si vous utilisez une source de données basée sur un fichier ou un serveur, vous pouvez extraire les données dans un thread d'arrière-plan et publier des mises à jour dans la collection en mémoire sur le thread de premier plan. Ne mettez pas à jour la collection de bases de données à partir du thread d'arrière-plan.

Questions connexes