2009-08-07 6 views
1

最初は私がUI開発者ではなく、これはおそらく非常に単純な問題です。外部イベントからUIを更新する

私はそのイベントは、サービスがこれを拾って発射したときに、これまでのイベントに加入外部サービスは、何らかの方法でデータを操作するどのような私が持っていることは、次に私は何

を表示するUIにデータを提供しますこれを元に戻す方法がわかりませんし、UIに更新を通知するサービスとUIを可能な限り緩やかにするサービスとの間の依存関係を維持する方法があります。

誰かがこれについてのストラテジーを提案したり、実際にいくつかの作業コードを見るためのサンプルやオープンソースプロジェクトのリンクを投稿できますか?

私はこのためにc#とether wpfまたはwinformsを使用しています。この問題への

乾杯

コリン・G

+0

また、簡単な問題ではありません:) –

答えて

1

このアプリケーションはどの程度シンプルですか?

最も簡単な解決策は、データアクセス/操作を1つのオブジェクトで行い、UIをそのオブジェクトにインターフェイスとして渡すことです。 UIインターフェイスメソッドを使用すると、UIにデータを渡すことはできますが、GUIでスレッドセーフな方法でデータを表示できるようになります。

もっと複雑なアプリケーションの場合は、MVCやMVPのようなものを調べる方が意味があると思います。またはMVVM for WPF、データバインディングの例についてはBea Costaのブログをご覧ください。

+0

モデル*パターンはネイティブにこの問題の解決策を提供しません。インターフェイスを介してUIを渡すことは、「リスナ」パターンと呼ばれ、イベントを使って簡単に行えますが、静的で不変なサービスはUIへの参照を保持するため、メモリリークを引き起こします永遠に(WeakReferenceの使い方など、複雑なことをやっていないと仮定して)それを周りに置いてください。 –

1

私のソリューションは、あなたのUIでタイマーを作成し、あなたのUIは「onTick」メソッドに加入することです。次に、すべてのタイマーティックで、UIにサービスを見て、表示するデータを探し出します。

+0

この状況では、タイマーは必要ありません。 –

0

この猫をスキンにする方法はたくさんありますが、要件と既存のインフラストラクチャについてもう少し詳しく知ることなく、EventBroker/Mediatorを使用することをお勧めします。これは、あまりにも多くの配管について心配することなく、一種のPublisher/Subscriberタイプの関係を実装する簡単な方法です。

プリズムを使用している場合は、EventAggregatorを使用することをおすすめします。

もしそうでなければ、John Smithが書いたMVVMFoundationで利用できるEventBrokerの "Messenger"実装の使用を検討することができます。それはあなたがMVVM または WPFを使用してに本当に依存していないですし、あなたが探しているものを行います。 http://mvvmfoundation.codeplex.com/

・ホープ、このことができます。

0

は、データを表示するためのUI ...私がイベントを発生させるとDTOを渡すサービス剤層を持っているあなたをお勧めします

を与えます。このイベントは、UIにバインドされたオブジェクトを含むレイヤーによってサブスクライブされる必要があります。このレイヤーがDTOを受信すると、UIを更新します。

関連する問題