6

MyContainerClass他のいくつかのクラスのコンテナであるクラス( と呼びましょう)があります(それらClassAを に呼びましょうClassF)。ClassA同じ基本クラスをClassF継承します (それを と呼びましょうMyBaseClass)。には、 継承する名前MyBaseClassの int プロパティがあります。toの合計である同じ名前の int プロパティもあります。CountClassAClassFMyContainerClassClassAClassF

次に、データグリッドがあり、各行には のオブジェクトが 1 つありますMyContainerClass。グリッドの列は に表示ClassAされClassFます。グリッドの最後の列には合計が表示されます (つまり、 のCountプロパティにバインドされていますMyContainerClass)。Countここで、AF 範囲内の任意のクラスのプロパティを変更するとすぐに、最後の列の合計が更新されるようにしたいと考えています。INotifyPropertyChanged を実装しましたが、プロパティ MyBaseClassを に変更すると起動します。しかし、データグリッドの最後の列は同じままです。手がかりはありますか?CountClassAClassF

編集: クラス図を作成しました。ここに画像の説明を入力

getCount() メソッドは objA.Count+objB.Count+...+objF.Count を返し、 のCountプロパティによって返されますMyContainerClass。問題は、objA.Count を更新する場合、GUI (データグリッドの列) に更新された合計を表示することです。

4

2 に答える 2

4

自動更新は実装するINotifyPropertyChangedだけでは不十分です。オブジェクトは、他の列のオブジェクトのMyContainerClass変更通知に「サブスクライブ」する必要があります。MyBaseClassこれを処理する 1 つの方法は、次のようなメソッドを に追加することですMyContainerClass

void SubscribeToCount(MyBaseClass item)
{
    item.PropertyChanged += (s,e) => 
        this.Sum += (e.NewValue - e.OldValue); 
}

そして、他の列のすべてのオブジェクトに対してこのメ​​ソッドを呼び出します。(質問からは明らかではありませんが、データグリッドをこのラッパークラスのコレクションにバインドする MyClassA-Fandのインスタンスを含むラッパークラスがあると思います)。MyContainerClass

于 2012-11-14T10:06:00.140 に答える
1

さて、Eren のソリューションをしばらく見つめた後に私が行ったことは次のとおりです。コンテナー クラスの INotifyPropertyChanged も実装し、PropertyChanged各オブジェクトのイベントを登録しました。

objA.PropertyChanged += updateCount;
objB.PropertyChanged += updateCount;
objC.PropertyChanged += updateCount;

...等々。次に、次のメソッドを追加しました

private void updateCount(object sender, PropertyChangedEventArgs e)
{
    OnPropertyChanged("Count");
}

今、私は私が望む行動をしています。

于 2012-11-14T12:00:01.543 に答える