2008-10-02 93 views
1

對於那些喜歡拼圖的人:我最近有這個問題,並且肯定必須有更好的解決方案。WPF綁定到一個對象集合,按ID存儲在另一個集合中的ID存儲在C#

考慮:

  • 對象的一個​​ObservableCollection稱爲FOOS
  • 包含字符串ID字段
  • 我有超過FOOS
  • FOOS不控制將被改變

然後:

  • 我所說的另一個集合sortLikeThis
  • sortListThis包含字符串
  • 中的字符串的順序的ID,其中FOOS是要顯示

加:在FOOS

  • 可能存在的對象的ID不在sortLikeThis。這些需要結束。
  • 同樣,可能有sortłikeThis中的字符串,它不會出現在foos

是否有綁定到並顯示在WPF中對象FOOS通過標識在sortLikeThis定義的順序一個不錯的方式?

謝謝, 李。

回答

2

聽起來像一個自定義可觀察集合的工作,它實現了IEnumerable並且有一個處理自定義排序邏輯的漂亮的枚舉器(aaah,yield)。

public class SortFoosLolThx : ObservableCollection<Foo> { 
public IList<string> SortList {/*...*/} 
/*...*/ 
public override IEnumerator<Foo> GetEnumerator() { /*...*/ yield foo; /*...*/} 
} 
+0

威爾嗨, 我不知道該解決方案的工作原理: 1.我有過的ObservableCollection ** ** FOOS無法控制的 - 所以尤其不能把它變成一個排序。 2.如果集合被修改,會觸發對SortList的調用? Lee – 2008-10-02 15:52:05

2

你看了看Bindable LINQ?它允許您在可觀察集合上定義LINQ查詢,並確保每次改變底層集合時都執行LINQ查詢。在你的情況下,你可以在集合之上添加一個Orderby查詢。

您可以將Orderby方法傳遞給委託來進行比較。要使用此功能,你會

  1. 通過創建一個字典映射sortLikeThis每個ID上升INT
  2. 在比較代表準備,查找字典中所傳遞用於比較的兩個FOOS的ID。如果找不到物品,請做適當的事情。
相關問題