Q
只讀可觀察集合
5
A
回答
5
可能使用此:ReadOnlyObservableCollection<T>
。請注意,由於ReadOnlyObservableCollection<T>
只能阻止對集合本身的更新,因此您必須爲自己的對象編寫自己的只讀封裝器。
1
我對這種類型的實現做了什麼,是爲了讓整個客戶端使用一個帶有底層BindingList的共享類。有一個公共readonly getter,並且在實際的UI展示器中,我包含了一種過濾列表(綁定到實例化的底層單例),這將允許客戶端視圖應用表達式過濾器(基於底層T,也啓用LINQ)並且,通過UI將數據綁定到此過濾列表,列表更改只有在它通過過濾器時纔會自動支持UI更新。它只是只讀的,因爲服務器端發佈更新到整個WCF控制器類,並將它們傳遞給List層,完全跳過UI。
1
我不喜歡使用ReadOnlyObservableCollection<T>
,因爲它看起來像一個錯誤/破碎的類;我更喜歡基於合同的方法。
以下是我使用允許的協變性:
public interface INotifyCollection<T> : ICollection<T>, INotifyCollectionChanged
{
}
public interface IReadOnlyNotifyCollection<out T> : IReadOnlyCollection<T>, INotifyCollectionChanged
{
}
public class NotifyCollection<T> : ObservableCollection<T>, INotifyCollection<T>, IReadOnlyNotifyCollection<T>
{
}
public class Program
{
private static void Main(string[] args)
{
var full = new NotifyCollection<string>();
var readOnlyAccess = (IReadOnlyCollection<string>) full;
var readOnlyNotifyOfChange1 = (IReadOnlyNotifyCollection<string>) full;
//Covarience
var readOnlyListWithChanges = new List<IReadOnlyNotifyCollection<object>>()
{
new NotifyCollection<object>(),
new NotifyCollection<string>(),
};
}
}
相關問題
- 1. 透視可觀察集合
- 2. 觀察集合
- 3. WPF觀察集合
- 4. DataTable觀察集合
- 5. 觀察只讀變量
- 6. 綁定可觀察集合到ListView
- 7. 可觀察集合OnNext沒有射擊
- 8. Silverlight DataGrid刷新可觀察集合
- 9. 用linq排序可觀察的集合
- 10. XAML綁定可觀察集合到DataGrid
- 11. 當前項目的可觀察集合?
- 12. 可觀察集合深拷貝
- 13. 創建可觀察列表/集合
- 14. Silverlight中的可觀察集合
- 15. 從可觀察集合創建XML樹
- 16. 綁定兩個可觀察集合
- 17. 實現可觀察集合的問題
- 18. Silverlight 3 - 過濾可觀察集合
- 19. 將可觀察集合綁定到GridView
- 20. Datagrid可觀察集合的多視圖
- 21. 如何更新可觀察集合組
- 22. 複合可觀察
- 23. 可觀察集合與可枚舉集合有什麼區別?
- 24. 的Javascript觀察集合數
- 25. 中觀察到的集合
- 26. 如何使用Silverlight中的另一個可觀察集合對一個可觀察集合進行排序
- 27. 個人觀察集合VS篩選觀察到的集合表現
- 28. RxJS結合可觀察
- 29. 拼合可觀察到的
- 30. 組合可觀察對象
歡迎和#1恭喜您的第一個答案。請儘量讓它更易於理解 - 例如通過格式化(代碼,單獨的段落或列表樣式)。也許一個例子會有所幫助? – Mateng 2012-11-14 23:02:51