1

はHomeViewModelとSellsViewModelを持っていました。

HomeViewModelには、プロパティ「SellID」があります

SellViewModelのコンストラクターで、HomeViewModelの参照を解決し、SellViewModelのm_objHomeViewModel変数に格納することができます。

SellViewModelのXAMLに、「SellID」を表示するテキストボックスがあります。このテキストボックスは「m_objHomeViewModel.SellID」にバインドされています。

私がこれを行っていることこれ を行うと、ユーザーがHomeViewModelで差「販売」を選択するたびに、自動的に私のSellViewModelがそれを取得し、SellViewの変更を表示します。

質問

  1. SellViewのXAMLテキストボックスはHomeViewModelのプロパティにバインドされているため、変更はすぐにUIに反映されます。

  2. しかし、SellViewModelでイベント(プロパティの変更など)をキャッチできません。そのようなイベントをキャッチすると、データベースから選択した「SellID」の他の値をロードしたいと思います。

  3. EventAgreegatorを使用していません。使用すれば、HomeViewModelによって公開されたSellViewModelのイベントを簡単にサブスクライブできます

Q1:Event Agreegatorを使用せずにそれを行うにはどうすればよいですか?

Q2:XAMLで、TextBoxがプロパティm_objHomeViewModel.SellIDにバインドされている場合、メモリリークが発生しますか?

Q3:HomeViewModelにある場合、(container.resolveを使用して)SellViewModelへの参照を取得し、HomeViewModelの「SellID」プロパティが変更されるたびにSellViewModelのパブリックプロパティまたはメソッドを呼び出します。それは良いプログラミングの習慣ですか?ここでは、HomeViewModelとSellViewModelの間に緊密な結合が作成されると思います

これについて提案してください...

よろしく

4

1 に答える 1

0

A1: 私があなたの設計を理解している場合、SellVM は HomeVM の PropertyChanged イベントを手動でサブスクライブする必要があります。HomeVM の SellId プロパティが PropertyChanged を発生させると、SellVM はそれを確認し、それに応じて応答します。

A2: アプリケーション全体を確認しなくても、単にプロパティにデータ バインドするだけではメモリ リークは発生しません。UI が表示されている限り、HomeVM はメモリ内に存在しますが、.NET は不要になったことを認識してメモリをクリーンアップするという優れた機能を果たします。これに対する答えは、全体的な設計に大きく依存しますが、SellVM を介して HomeVM から SellID をバインドするという単純な行為だけでは、メモリ リークは発生しません。

A3: これは少し奇妙に聞こえます。完全なアーキテクチャを理解していない場合、SellID は SellVM に属している必要があり、ユーザーが SellID を切り替えると、HomeVM は SellVM に適切な SellID をロードします。これはオブジェクト指向のように見え、懸念事項を分離することができます。このようにして、「Sell」(販売?) に関するすべてが SellVM にカプセル化され、HomeVM が厳密に調整 (正しい子 VM のロード) を担当します。しかし、これはあなたの全体的なデザインについて私が収集できるわずかな情報に基づいています.

于 2012-07-29T15:23:56.473 に答える