C# 在IEnumerable上使用可观察集合的利弊

C# 在IEnumerable上使用可观察集合的利弊,c#,wpf,collections,ienumerable,observablecollection,C#,Wpf,Collections,Ienumerable,Observablecollection,我正在尝试决定是否要将所有的IEnumerable集合切换到可观察集合。我找不到一个很好的解释。从可以理解的角度来看,Observable Collection的优缺点是什么?我可能会这样回答您的问题:当您的集合更改内容时,是否需要通知您的应用程序?如果是这样,那么这样的改变可能是有理由的。我的理解是,可观察集合的总体特征是,当集合发生更改时,它们提供了一种通知机制,而IEnumerable只提供了一个迭代枚举器 我希望这会有所帮助。您可以决定将IEnumerable作为某些属性的类型,但使用O

我正在尝试决定是否要将所有的
IEnumerable
集合切换到可观察集合。我找不到一个很好的解释。从可以理解的角度来看,Observable Collection的优缺点是什么?

我可能会这样回答您的问题:当您的集合更改内容时,是否需要通知您的应用程序?如果是这样,那么这样的改变可能是有理由的。我的理解是,可观察集合的总体特征是,当集合发生更改时,它们提供了一种通知机制,而IEnumerable只提供了一个迭代枚举器


我希望这会有所帮助。

您可以决定将
IEnumerable
作为某些属性的类型,但使用
ObservableCollection
作为实际值

如果您有这样的财产:

private IEnumerable<Something> collectionOfSomething;
public IEnumerable<Something> CollectionOfSomething
{
    get { return collectionOfSomething; }
    set
    {
        collectionOfSomething = value;
        NotifyPropertyChanged("CollectionOfSomething");
    }
}

可观察集合的全部要点是它们实现以下接口

 INotifyCollectionChanged, INotifyPropertyChanged 

这使得向UI/ViewModel发出更改警报并进行相应更新非常容易。如果未使用ObservateCollection,则需要您自己手动实现对集合/属性的更新。

使用ObservateCollection的最大好处是它自动实现INotifyCollectionChanged和INotifyPropertyChanged,从而简化数据绑定。我想说的是,当您第一次设置数据绑定时,最好使用ObservableCollection

但现在您已经编写了一堆IEnumerables(并绑定了数据?),在这一点上没有任何节省


另一个要考虑的是<代码> VistabeCelpEng/<代码>是<代码> iNeXaby(继承自<代码>集合< /代码>)。由于

IEnumerable
是一个接口,它由许多类实现
List
就是这样一个类-
observedcollection
是另一个类。

我喜欢@Clemens示例,它在代码中显示了数据绑定方面的差异。所以,也许你将来加入项目的所有人都可以从
可观的集合中获益
我还没有限制他们。。。我在这方面遇到了问题,因为我必须使用另一个视图中的值,而我正在使用的视图无法看到该数据。我听说将其更改为可观察的集合可以修复它,但我仍然不能完全确定。。这里有一个链接到我之前的问题,导致这个问题。。。嗯,这真的很有帮助。。我可能会搞一段时间。它可能会解决我在IEnumerable上遇到的问题。谢谢\作为一个次要的旁注:可观测也实现了IEnumerable。它们还有一个额外的好处,那就是它们也可以设置为被UI监控。关闭了吗?我恭敬地不同意这一投票。这完全在FAQ中提到的“我希望其他人向我解释”的范围内,并确定OP要求解释的具体元素。有几个好的、详细的答案,我认为这表明“非建设性”的结论是不恰当的。投票重新开放。谢谢你@David W。我自己对它为什么关闭有点困惑。@JLott不客气。不知道它是否有用,但有时必须尝试:)
someViewModelObject.CollectionOfSomething = new MyVerySmartCollection<Something>();
 INotifyCollectionChanged, INotifyPropertyChanged