2012-11-14 93 views
3

我有一個類(我們稱之爲MyContainerClass),它是其他幾個類的容器(我們稱它們爲ClassAClassF)。 ClassAClassF繼承了相同的基類(我們稱之爲MyBaseClass)。在MyBaseClass我有一個int名稱Count,其中ClassAClassF繼承。我在MyContainerClass中也有一個同名的int屬性,它是ClassAClassF之和。INotifyPropertyChanged:通知其他類

然後我有一個數據網格,每一行有一個對象MyContainerClass。網格的列顯示ClassAClassF。網格中的最後一列顯示了總數(即它是MyContainerClassCount屬性的綁定)。現在,我希望在更改A-F範圍內的任何類別中的Count屬性後,立即更新最後一列中的總數。我在MyBaseClass中實現了INotifyPropertyChanged,並且在將ClassA中的Count屬性更改爲ClassF時,它會觸發。但是我的數據網格中的最後一列保持不變。任何線索?

編輯: 我已經創建了一個類圖。 enter image description here

利用getCount()方法返回objA.Count + objB.Count + ... + objF.Count並通過在MyContainerClassCount屬性返回。問題是:如果我更新objA.Count,我希望GUI(即我的數據網格中的列)顯示更新的總和。

+0

你說datagird保持不變,但屬性本身是否改變?換句話說 - 您是否檢查過「MyContainerClass」中的Count屬性是否已更新? – Blachshma

+1

如果您可以爲您的課程發佈一些XAML和一些源代碼,那麼診斷出現問題會更容易! –

+0

@Blachshma,它已更新。如果我檢查調試器中的對象,我總會看到正確的數字。只有GUI不更新。 – Peter

回答

3

只是實施INotifyPropertyChanged是不夠的自動更新。 MyContainerClass對象需要「訂閱」其他列中的MyBaseClass對象的更改通知。你可以處理這個問題的方法之一是通過增加類似下面的MyContainerClass的方法:

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

你調用此方法在其他列的所有對象。 (這個問題並不清楚,但我認爲有一個包裝類包含MyClassA-FMyContainerClass的實例,它們將datagrid綁定到這個包裝類的集合)。

+0

這解決了我遇到的同樣的問題,我需要一個(最初計算的)屬性來通知對不同類的更改。謝謝! – Dan

1

好的,下面是我在盯着Eren的解決方案一段時間後所做的工作:我還爲容器類實現了INotifyPropertyChanged,併爲每個對象註冊了PropertyChanged事件。

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

...等等。然後我加了下面的方法

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

現在我有我想要的行爲。

+0

太棒了,這就是我現在已經瞭解你的問題的那種解決方案!我認爲你可以將自己的答案標記爲你接受的答案嗎? –