0

我把EmployeeList作爲Employee對象的observableCollection。是否可以使用IMultiValueConverter作爲項目列表?

Employee對象有薪水。

我想顯示一些值,如XAML中員工的平均工資,當項目添加到列表中或更新任何項目中的「工資」字段時,應自動更新UI字段。

這可以通過創建一個平均屬性並收聽列表中的集合Changed和ProperyChanged處理程序來實現。

但是,我相信應該有其他更好的方法來做到這一點。 (如使用AttachedProperties或IValueConverter/IMultiValueConverter)

關於此問題,我有以下問題。

  1. 是否有可能使用IMultiValueConverter的List/ObservableCollection的項目?當物品添加到列表以及某個特定物業發生變化時,應該調用轉換器嗎?

回答

1

使用屬性絕對是一種方式,特別是從MVVM的角度來看。認爲Occam's Razor:基本上,最簡單的解決方案通常是最好的。

這絕對是最乾淨的解決方案,因此最易於維護。另外,它是最具擴展性的(如果您願意,可以輕鬆地爲不同計算添加新屬性)。

您只需創建只讀屬性,並在集合更改時調用PropertyChanged(它聽起來像是您正在做的)。

例如,這裏是一個「平均」屬性:

public Double Average 
{ 
    get { return mMyCollection.Average(); } 
} 

void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    PropertyChanged(this, new PropertyChangedEventArgs("Average")); 
} 

附加屬性將無法正常工作 - 他們是在一個子元素指定父母的財產。

ValueConverters會理論上工作(雖然他們可能必須在列表中的每個項目上以及整個集合中),但是您沒有真正轉換任何東西,您正在提供基於現有的其他數據數據。要做到這一點,您需要仔細研究各種模板,並且無論何時您需要改變任何內容,您都需要再次嘗試。它會變得很複雜,沒有任何好處。

相關問題