2009-08-07 7 views
1

Erstens bin ich kein UI-Entwickler und das ist wahrscheinlich ein sehr einfaches Problem.Update UI von externen Ereignis

Was ich habe, ist ein externer Service, den ich ein Ereignis abonnieren, wann immer dieses Ereignis ein Dienst feuert diese aufgreift, um die Daten in irgendeiner Weise manipuliert gibt dann die UI die Daten

angezeigt werden, was ich bin Unsicher ist, wie man dies artet und die Abhängigkeiten zwischen den Diensten hält, die die Benutzeroberfläche auf den neuesten Stand bringen und die Benutzeroberfläche so locker wie möglich machen.

Kann jemand eine Strategie für dieses vorschlagen oder mir einige Links auf Beispielen oder einem Open-Source-Projekt schreiben, um tatsächlich etwas Arbeitscode zu betrachten.

Ich verwende C# und Ether WPF oder winforms für diese.

Prost

Colin G

+0

Auch: es ist kein einfaches Problem :) –

Antwort

1

Wie einfach ist diese Anwendung?

Die einfachste Lösung besteht darin, dass der Datenzugriff/die Datenbearbeitung in einem Objekt erfolgt und die Benutzeroberfläche als Schnittstelle an das Objekt übergeben wird. Mit den UI-Schnittstellenmethoden können Sie der Benutzeroberfläche Daten zur Verfügung stellen, die Benutzeroberfläche jedoch so handhaben, dass die Daten in einer thread-sicheren GUI angezeigt werden.

Wenn es eine komplexere Anwendung ist, würde ich sagen, es wäre sinnvoller, in etwas wie MVC oder MVP zu suchen. Oder MVVM für WPF, vielleicht werfen Sie einen Blick auf Bea Costa Blog für Databinding Beispiele.

+0

Die Model * -Muster bieten keine native Lösung für dieses Problem.Das Übergeben Ihrer Benutzeroberfläche über eine Schnittstelle wird als "Listener" -Muster bezeichnet und lässt sich leichter mithilfe von Ereignissen durchführen, führt jedoch auf diese Weise zu Speicherlecks, da der Dienst, der statisch und unveränderlich ist, auf eine Weise auf die Benutzeroberfläche verweist es für immer um (vorausgesetzt, Sie tun nicht etwas Kompliziertes, wie WeakReference, usw.). –

1

für dieses Problem Meine Lösung ist ein Timer in Ihrem ui zu erstellen, und haben Ihre ui auf die 'onTick' Methode abonnieren. Überprüfen Sie dann bei jedem Timer-Tick die Benutzeroberfläche, um herauszufinden, welche Daten angezeigt werden sollen.

+0

Sie brauchen Timer in dieser Situation nicht. –

0

Es gibt viele Möglichkeiten, diese Katze zu häuten, aber ohne ein wenig mehr über Ihre Anforderungen und Ihre bestehende Infrastruktur zu wissen, lassen Sie mich vorschlagen, dass Sie einen EventBroker/Mediator dafür verwenden. Dies ist eine einfache Möglichkeit, eine Art Beziehung zwischen Veröffentlicher und Abonnenten zu implementieren, ohne sich um zu viele Installationen kümmern zu müssen.

Wenn Sie Prisma verwenden, würde ich vorschlagen, die EventAggregator zu verwenden.

Wenn nicht, könnten Sie die "Messenger" -Implementierung eines EventBroker verwenden, der mit dem MVVMFoundation-Zeug verfügbar ist, das John Smith geschrieben hat. Es ist nicht wirklich abhängig von Ihnen MVVM oder WPF und tut, was Sie suchen: http://mvvmfoundation.codeplex.com/

Hoffnung, das hilft.

0

gibt dann die Benutzeroberfläche die Daten anzuzeigen ...

Ich würde Ihnen vorschlagen, einen Service-Agent Schicht zu haben, die ein Ereignis auslösen wird und ein DTO passieren. Dieses Ereignis sollte von dem Layer abonniert werden, der Objekte enthält, die an die Benutzeroberfläche gebunden sind. Sobald diese Ebene den DTO empfängt, aktualisieren Sie die Benutzeroberfläche.