2017-05-04 31 views
-1

我正在編寫一個WPF應用程序,在我看來,我需要根據Employee類的不同屬性顯示分組的員工考勤計數的儀表板。我將擁有一個可觀察的Employee對象集合,這些對象將繼續得到更新,這些對象應該依次更新儀表板中的計數器。將Linq表達式與MVVM綁定到一個Xaml控件屬性

由於計數需要進行分組的屬性的動態性質,我們不能使用與我們需要顯示的計數器數量一樣多的屬性。

所以任何人都可以請求幫助,如果有一種方法將linq表達式綁定到一個屬性,每當集合發生一些變化時就會評估和更新視圖。

回答

0

你必須自己在你的視圖模型中滾動它。

給出ObservableCollection<Employee> a CollectionChanged處理程序。在該處理程序中,您希望爲每個新添加的Employee處理程序添加一個PropertyChanged處理程序,並從已從集合中刪除的任何Employee中刪除該處理程序PropertyChanged。所以兩個處理程序:

void Employees_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 

void Employee_PropertyChanged(object sender, PropertyChangedEventArgs e) 

現在你已經有了一個通知,隨時收集得到或失去一個項目,另一個通知任何時候一個項目屬性集合改變其價值。

現在寫一個方法,更新您的聚合,組,任何。稱它爲UpdateCounters()UpdateCounters()做LINQ的東西,並把結果放在viewmodel屬性與私人setter。請在集合的CollectionChanged處理程序中以及Employees的PropertyChanged處理程序中調用UpdateCounters()。如果您只關心員工的某些屬性,則在適當的屬性更改時,Employee_PropertyChanged僅調用UpdateCounters()可節省一些週期。

+0

謝謝,唯一的問題是,我不能在viewmodel中定義道具bcoz沒有任何計數器是基於emp屬性的動態..小編說有屬於公司3個部門的emps我需要3個計數器,之後如果它們屬於4種不同的名稱,我需要3 * 4 = 12個計數器用於每個指定組合。爲此,我需要使用items控制重複計數器,所以我不能在vm中爲每個計數器定義prop,並且o試圖查看是否可以將每個計數器的xaml中的長exp綁定起來 – KNara

+0

@ KNara因此,將表達式的結果放入ObservableCollection並顯示在ItemsControl中。這對我來說聽起來很好。你不能把LINQ放在一個綁定的地方,如果可以的話,反正它會變得不那麼靈活。 –

+0

在這種情況下,我如何更新任何更改或如何raise.propertychanged。我不知道計數器集合中的哪個屬性項需要更新。我不喜歡這樣的想法,即如果條件更新該特定屬性,因爲我需要顯示4個屬性組合的計數器,所以基本上我在考慮如果我可以爲每個計數器綁定一個表達式,我會爲所有計數器提出propertychange事件,會重新評估exp以更新新值....如果我理解錯誤方法,請糾正我 – KNara