問題タブ [eventaggregator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
event-handling - ドメイン イベント v イベント アグリゲーター v... その他
ドメインに複合構造があり、リーフ ノード (Allocation) に DurationChanged イベントがあり、これをプレゼンテーション レイヤー ビュー モデル構造 (TimeSheetViewModel 内) の上部で使用したいと考えています。それに到達する。
頭に浮かぶオプションは次のとおりです。
- TimeSheetComposite で購読します。各コンポジットは最終的に割り当てで構成され、TimeSheetComposite は TimeSheetViewModel のモデルです。子の DurationChanged イベントが発生したときに発生する TimeSheetComposite のイベントも必要になるようです。TimeSheetViewModel は後者のイベントをサブスクライブします。
- DurationChanged イベントを無視し、AllocationViewModel.Amount が変更されたときに TimeSheetViewModel に到達する INPC チェーンに従います。有用な情報、特に編集前の古い Amount はありませんが、必要に応じて必要な最終結果を十分に安価に計算できます。
- DurationChanged イベントをDomain Eventにします。私は現在ドメイン イベントを使用していませんが、コンセプトは確かに気に入っています。Udi の記事には、それを使い始めるのに十分なコードがあるようです。
- DurationChanged をパブリッシュおよびサブスクライブするために、ある種の Event Aggregator をセットアップします。Domain Events と Event Aggregators の違いは何なのか、同じことを解決するための補完的なアプローチなのか代替のアプローチなのか、まだよくわかりません。ここでのRx を使用した実装は有望に見えます。
この設計では、TimeSheetViewModel は Allocation.Duration がいつ変更されたかを知る必要があるため、日付ごとのすべての割り当て期間の新しい合計を取得できます。
DurationChanged 通知をどのように提供しますか?
乾杯、
ベリル
ドメイン複合構造とイベント
プレゼンテーション層の構造
eventaggregator - Prism 4 を使用したイベント集約
PRISM 4 でのイベント集計について、私が正しいかどうか確認してもらえますか?
イベントが最初に公開されるまでイベントを購読できないのですか、それとも何か不足していますか?
silverlight-4.0 - EventAggregation クイック スタート?
DataContext が xaml で初期化された MainViewModel であるという MainView を作成しました。
MainView には、MainViewModel の Content プロパティにバインドされた ContentControl が含まれています。
MainViewModel コンストラクターにいくつかのコンテンツを追加したので、現在のユーザーがログインしていない場合、LoginView (およびそれに対応する DataContext LoginViewModel) がこの Content プロパティに自動的に読み込まれます。
今私の質問は、ユーザーが正常にログインしたときに何をすべきかです:
これはどのように行われますか?
注:私EventAggregator
は他のものよりもプリズムのrathenを使用することを好みますが、手がかりがありません:
- ViewModel 間で展開する方法
- イベントの作成方法 (パラメーターを渡す必要も、一般的である必要もありません。ただ
Action
、LoginAction
パラメーターはありません。 - MainViewMode からサブスクライブするにはどうすればよいですか。
- MEF や Unity は使用せず、個別のモジュールも使用しません。アプリケーションはすべて 1 つのアセンブリに含まれています。
- コード ビハインドにコードをまったく記述しないことを好みます
- VB.NET または C# の両方で同じ回答を歓迎します
どんな助けもお勧めします
silverlight-4.0 - 非ジェネリック CompositePresentationEvent と EventSubscription?
TPayLoad
-freeを作成しようとしていますがCompositePresentationEvent
、そのデリゲートはパラメーターなしです。
などUserLoggedInEvent
のパラメータを取らないグローバル アプリケーション イベントが必要です。UserGotIdleEvent
これを Prism 4.0 イベント集約システムでどのように行う必要がありますか?
.net - MethodInfo.Invoke は、Prism EventAggregator のデバッグ モードでのみ機能します。
Prism の EventAgregator がリフレクションを使用してイベントを発行するための拡張メソッドがあります。実装は次のとおりです。
このメソッドは、型付きパラメーターを必要とする拡張メソッドを呼び出します。このコードとイベントは問題なく動作しますが、デバッグ モードでのみ動作します。リリース ビルドに切り替えると、イベントがサブスクライバーに到達しません。
サブスクリプション中にオプションのパラメーターを使用してみましkeepSubscriberReferenceAlive
たが、問題は解決しません。
この問題を解決する方法について何か考えはありますか?
更新 問題は上記に関連していないことがわかりました。同じアセンブリ内からのイベントのみを許可するフィルターが配置されているようです。しかし、これは、デバッグ モードでコードが機能した理由を説明するものではありません。
wpf - PRISM とイベント アグリゲーター
PRISM WPF アプリケーションがあります。コンストラクターでイベント (CultureChangedEvent としましょう) をサブスクライブし、アクションを実行する PatientViewModel があります。
私のメイン ビュー モデルには、ObservableCollection があります。
ユーザーが ObservableCollection から PatientViewModel インスタンスを削除し、CultureChangedEvent が発生した場合、削除された PatientViewModel は引き続きメモリ内にあり、イベントを受け取ります。そのため、現在、PatientViewModel を削除するときは、イベントの登録を解除しています。しかし、これが正しいアプローチなのだろうか?または、何か不足していますか?
ありがとう!L
c# - EventAggregator for .net 2.0
私の.net2.0Win Formsアプリケーションでは、さまざまな場所/クラスからOnProgressイベントのようなものを発生させ、これらすべてのイベントを1か所で処理したいと考えています。
依存性注入にMicrosoftのUnityContainerを使用しており、CompositeApplicationLibraryのEventAggregatorで発生した問題の適切な解決策を見ました。
.net2.0で動作するEventAggregatorに似たものを教えてください。
ありがとう。
.net - Prism:EventAggregator と MEF - EventAggregator の 2 つの異なるインスタンス
私は次の設定をしています:
- xaps/モジュールに分割された Silverlight アプリ
MEF を DI フレームワークとして使用して、アプリケーションのさまざまな部分を接続します。
私は2つの地域を持っています:
1 つ (左のもの) には、リスト ビュー (例: 顧客) が取り込まれます。
1 つ (右のもの) には、領域を持つタブ コントロールを含む別のビューを (選択した顧客に応じて) 領域を持つタブ コントロールを含むビューが取り込まれます。
右側の結果:
最初のレベルのタブコントロールを設定するために、「顧客変更イベント」をリッスンしています-(これはうまく機能します)。イベントを受信すると、最初のレベルのタブ領域にビューを設定します:
注: FirstLevelView を作成するときは、FirstLevelView がCompositionInitializer.SatisfyImports
その ViewModel 参照を解決することを確認するために、呼び出しをスローする必要があります。
SecondLevel ViewModel で EventsAggregator のインスタンスを取得するには、次を使用します。
私の問題は、第 2 レベルのビュー モデルで取得した EventAggregator インスタンスが第 1 レベルの EventAggregator インスタンスと異なるため、第 1 レベルで DoStuffSecondLevel を公開すると、第 2 レベルでキャッチされないことです。
EventAggregator の 2 つの異なるインスタンスを取得するのはなぜですか?
アプリケーション全体で EventAggregator の同じインスタンスを共有するにはどうすればよいですか?
前もって感謝します
c# - EventAggregator パターン: データを渡すには?
ビュー/ビューモデル間の疎結合をサポートするために、作業中の UI プロジェクト (Silverlight/MVVM) でイベント アグリゲーター パターンを利用することを検討しています。簡単なイベンティング システムを使用していくつかの画面を作成しました。この時点では概念実証にすぎませんが、疎結合システムを作成するための非常に洗練されたソリューションのように思えます。
私が直面している問題は、受信ビューモデルがまだインスタンス化されていないときに、あるビューモデルから別のビューモデルにデータを渡すことです。たとえば、Customer List 画面が開いている場合、ユーザーは特定の顧客をクリックして、Customer Detail の編集/表示画面 (おそらく子ウィンドウ) を開くことができます。顧客の詳細画面が機能するには、顧客 (または顧客 ID) が必要です。
したがって、OpenCustomerDetailEvent に関連する顧客情報が含まれていることは妥当と思われますが、その情報を Customer Detail V/VM に挿入するためのオプションにはどのようなものがありますか? イベントが処理されるときはまだメモリ内にないため、イベントを直接リッスンすることはできません (それ自体がハンドラーになることはできません)。ビューとビュー モデルの両方を作成するために依存性注入コンテナーを使用しているため (現在は「ビューを最初に」実行しています)、別のハンドラーにコンストラクターを介してデータを注入させることは適切なオプションではありません。
データが構築されたら、View(Model) にデータを取得するための他のオプションは何ですか? 厳密に型指定されたパラメータを取る init メソッド? セッターを使用してデータを注入しますか? ハンドラーに V/VM を作成させてから、VM がリッスンする 2 番目のイベントをディスパッチしますか?
c# - イベント アグリゲーターは、メモリ リークを防ぐためだけに使用する必要がありますか?
イベント参照によるメモリリークを減らす目的で、 Prismイベントアグリゲータの利用を検討しています。
これ自体がこのパターンを使用する正当な理由ですか? 他の利点は、今のところ私たちにとって興味深いものではありません。UI ではなく、モデル コンポーネント間で使用する予定です。
私たちの問題は、一部の開発者がイベントの登録を解除するのを忘れていたことです。Prism には弱参照を使用するフレーバーが 1 つありますが、これには制限があります。もう 1 つのフレーバーは明示的に Unsubscribe() を強制しますが、これもまた忘れられる可能性があります。それで、それはどのように良いですか?