2009-08-07 7 views
1

Tout d'abord, je ne suis pas un développeur d'interface utilisateur et il s'agit probablement d'un problème très simple.Mise à jour de l'interface utilisateur d'un événement externe

Ce que j'est un service externe que je souscris à un événement, à chaque fois que cet événement déclenche un service prend cette place, manipule les données d'une certaine façon donne alors l'interface utilisateur les données à afficher

Qu'est-ce que je suis incertain est comment archétiser cela et garder la dépendance entre le service qui dira l'interface utilisateur à mettre à jour et l'interface utilisateur aussi lâche que possible. Quelqu'un peut-il suggérer une stratégie pour cela ou me poster des liens sur des exemples ou un projet open source pour réellement regarder un code de travail. J'utilise C# et ether wpf ou Winforms pour cela.

Vive

Colin G

+0

En outre: ce n'est pas un problème simple :) –

Répondre

1

Quelle est la simplicité de cette application?

La solution la plus simple consiste à avoir l'accès/la manipulation de données dans un objet et à faire passer l'interface utilisateur en tant qu'interface dans cet objet. Avec les méthodes de l'interface utilisateur, vous pouvez donner des données à l'interface utilisateur, mais laissez l'interface utilisateur gérer l'affichage des données dans une interface graphique sécurisée.

Si c'est une application plus complexe, je dirais qu'il serait plus logique de se pencher sur quelque chose comme MVC ou MVP. Ou MVVM pour WPF, peut-être regarder le blog de Bea Costa pour des exemples de liaison de données.

+0

les modèles Model * ne fournissent pas nativement une solution à ce problème.Le passage de votre interface via une interface est connu sous le nom de modèle "Listener" et se fait plus facilement en utilisant des événements, mais vous finissez par causer des fuites de mémoire car le service statique et immuable a une référence à l'interface utilisateur. c'est autour pour toujours (en supposant que vous ne faites pas quelque chose de compliqué, comme en utilisant WeakReference, etc). –

1

Ma solution à ce problème est de créer une minuterie dans votre interface, et votre ui abonner à la méthode 'onTick'. Puis, à chaque tick de minuterie, demandez à l'interface utilisateur de regarder le service et de déterminer quelles données afficher.

+0

Vous n'avez pas besoin de temporisateur dans cette situation. –

0

Il y a beaucoup de façons d'habiller ce chat, mais sans en savoir un peu plus sur vos besoins et votre infrastructure existante, laissez-moi vous suggérer d'utiliser un EventBroker/Mediator pour cela. C'est un moyen facile d'implémenter une sorte de relation de type éditeur/abonné sans se soucier trop de la plomberie.

Si vous utilisez Prism, je suggère d'utiliser le EventAggregator. Si ce n'est pas le cas, vous pouvez envisager d'utiliser l'implémentation "Messenger" d'un EventBroker disponible avec le composant MVVMFoundation écrit par John Smith. Ce n'est pas vraiment dépendant de vous en utilisant MVVM ou WPF et fait ce que vous cherchez: http://mvvmfoundation.codeplex.com/

Hope this helps.

0

donne alors l'interface utilisateur les données à afficher ...

Je vous suggère d'avoir une couche d'agent de service qui soulèvera un événement et passer un DTO. Cet événement doit être souscrit par la couche qui contient des objets liés à l'interface utilisateur. Une fois que cette couche reçoit le DTO, mettez à jour l'interface utilisateur.

Questions connexes