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. 当前项目的可观察集合?
- 4. 创建可观察列表/集合
- 5. Silverlight DataGrid刷新可观察集合
- 6. Silverlight 3 - 过滤可观察集合
- 7. 从可观察集合创建XML树
- 8. 实现可观察集合的问题
- 9. 将可观察集合绑定到GridView
- 10. 可观察集合深拷贝
- 11. 用linq排序可观察的集合
- 12. 如何更新可观察集合组
- 13. XAML绑定可观察集合到DataGrid
- 14. Datagrid可观察集合的多视图
- 15. 绑定两个可观察集合
- 16. 可观察集合与可枚举集合有什么区别?
- 17. 的Javascript观察集合数
- 18. 组合可观察对象
- 19. 平映射在观察集合观察到的性质RxSwift
- 20. 将数据集转换为可观察集合
- 21. 在可观察集合上取消收集已更改事件
- 22. 合并SAS数据集但只保留常见观察
- 23. 观察员可以观察多个可观察物吗?
- 24. 组合/合并可观察对象
- 25. 如何在Silverlight中将两个可观察的集合合并到集合中
- 26. 观察PropertyChanged集合中的项目
- 27. WPF观察集合,动态类型
- 28. 实施IsDirty在WPF MVVM观察集合
- 29. 如何复制观察到的集合
- 30. 如何观察Ruby中的(mongo)集合?
欢迎和#1恭喜您的第一个答案。请尽量让它更易于理解 - 例如通过格式化(代码,单独的段落或列表样式)。也许一个例子会有所帮助? – Mateng 2012-11-14 23:02:51