将 IList<T> 附加到 ObservableCollection<T>
Attaching an IList<T> to an ObservableCollection<T>
Collection<T>
是 IList<T>
的包装器。 列表可以附加在构造函数中。据我所知,没有提供其他方法。
尽管 ObservableCollection<T>
派生自 Collection<T>
,但您不能附加 IList<T>
。实例可以从 List<T>
而不是 IList<T>
构造,并且 列表是 copied.
public 源代码似乎证实了上述内容。
- 这种不一致是错误吗?
- 我如何附加我自己的
IList<T>
实现到ObservableCollection<T>
?该解决方案必须使用标准 ObservableCollection<T>
.
我是 c# 新手。谢谢。
这看起来绝对不像是错误,我也不知道为什么会出现不一致。
ObservableCollection
的功能可以防止这种情况发生。该功能保证您可以收到 ObservableCollection
的任何更改通知。为了能够做到这一点,它需要对保存其条目的底层数据结构进行完全控制更改。
如果只是 "attach" 和现有列表,则 ObservableCollection
没有句柄以通知更改。让我们想象以下场景:
IList<string> someStringList = new List<string>
{
"Entry1",
"Entry2",
"Entry3"
};
var observableCollection = new ObservableCollection<string>(someStringList);
observableCollection.CollectionChanged += (sender, eventArgs) => Console.WriteLine("Something changed!");
someStringList.Add("This addition cannot be seen by the ObservableCollection!");
这是一致的,ObservableCollection
已经创建了一个副本,所以如果我们查看它,它不会包含 "This addition cannot be seen by the ObservableCollection!" 条目。
现在如果你想要的东西可以工作(所以 ObservableCollection
必须是原始列表 "attached" 而不是复制),我们会有一些奇怪的东西。 CollectionChanged
事件不会被触发(添加没有通过 ObservableCollection
的添加)但是如果你检查 observableCollection
它会包含添加的条目(因为它是添加到 "attached" 列表),这会使整个事情变得不一致。
至少这是我对为什么这可能是一个设计选择而不是一个错误的看法。
希望对您有所帮助!
Collection<T>
是 IList<T>
的包装器。 列表可以附加在构造函数中。据我所知,没有提供其他方法。
尽管 ObservableCollection<T>
派生自 Collection<T>
,但您不能附加 IList<T>
。实例可以从 List<T>
而不是 IList<T>
构造,并且 列表是 copied.
public 源代码似乎证实了上述内容。
- 这种不一致是错误吗?
- 我如何附加我自己的
IList<T>
实现到ObservableCollection<T>
?该解决方案必须使用标准ObservableCollection<T>
.
我是 c# 新手。谢谢。
这看起来绝对不像是错误,我也不知道为什么会出现不一致。
ObservableCollection
的功能可以防止这种情况发生。该功能保证您可以收到 ObservableCollection
的任何更改通知。为了能够做到这一点,它需要对保存其条目的底层数据结构进行完全控制更改。
如果只是 "attach" 和现有列表,则 ObservableCollection
没有句柄以通知更改。让我们想象以下场景:
IList<string> someStringList = new List<string>
{
"Entry1",
"Entry2",
"Entry3"
};
var observableCollection = new ObservableCollection<string>(someStringList);
observableCollection.CollectionChanged += (sender, eventArgs) => Console.WriteLine("Something changed!");
someStringList.Add("This addition cannot be seen by the ObservableCollection!");
这是一致的,ObservableCollection
已经创建了一个副本,所以如果我们查看它,它不会包含 "This addition cannot be seen by the ObservableCollection!" 条目。
现在如果你想要的东西可以工作(所以 ObservableCollection
必须是原始列表 "attached" 而不是复制),我们会有一些奇怪的东西。 CollectionChanged
事件不会被触发(添加没有通过 ObservableCollection
的添加)但是如果你检查 observableCollection
它会包含添加的条目(因为它是添加到 "attached" 列表),这会使整个事情变得不一致。
至少这是我对为什么这可能是一个设计选择而不是一个错误的看法。
希望对您有所帮助!