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