0

したがって、ルーティングされたイベントの概念は初めてですが、RaiseDataMemberChanging / RaiseDataMemberChangedメッセージを介してフィールドが変更されると、メッセージがどこにでも飛んでいることを知っています。

簡単な質問は、ルーティングされたメッセージをどのように「聞く」かです。

私のビューモデルは、MVVMの正しい問題で、テーブルの階層の奥深くで、フィールドが更新されているというメッセージをインターセプトしたいと思います。子(日付範囲)で変更が発生した場合、その日付範囲の変更には、トップダウンで機能するビジネスロジックが関連付けられています。

部分的なメソッドを使用して、変更イベントと変更イベント中にコードを挿入できることは知っていますが、設計(1対1の関係)は、子のコンテキストでの子への変更が親を参照しないことを意味します(親には子への1対1の参照がありますが、子には親への参照がありません)。

はい、子から親への参照を追加できます(親に1対1の関係と、1対多の関係の両方を持たせる)が、エンティティの作成中に問題が発生します-親は前に存在する必要があります子エンティティが存在し、親への参照が存在する前に子エンティティが存在する必要があります。この設計では、親と子を挿入してから子を更新する必要があります。これにより、最初の作成プロセス中にWCFRIAサービスが混乱します。

長い説明で申し訳ありませんが、コメントを気にする人にとってこれがすべて理にかなっているのであれば、デザインの変更も検討します。

任意の入力をいただければ幸いです。

4

1 に答える 1

0

問題のエンティティのPropertyChangedイベントへのサブスクリプションを使用しています。いくつかのフィールドのすべてのイベントを除外するのは大変な作業のようです。

RXを使用して、使用されるリソースが最小限であり、強参照がイベントの処理に使用される場合の弱参照がメモリリンクの問題を回避することを期待しています。

        Observable.FromEventPattern<PropertyChangedEventArgs>(this.FlowEntity, "PropertyChanged")
      .Where(pPropertyChanged => (
                                 pPropertyChanged.EventArgs.PropertyName.EndsWith("Date")) ||
                                 pPropertyChanged.EventArgs.PropertyName == "Capacity"
                                 )
      .Subscribe(pObserver => this.RaiseFlowEntityDateChanged(this, pObserver.EventArgs));

FlowEntityは、親から監視している子エンティティです。次に、実際にイベントを保持するエンティティではなく、親エンティティを使用してカスタムイベントを発生させます。

子エンティティには親のコンテキストがないため、部分メソッドからこのイベントを発生させることはできません。

于 2011-09-24T18:44:00.853 に答える