将List转换为ObservableCollection的最佳方法我有一个List,其中Object有很多子List,大约4-6个级别。现在我必须将它绑定到WPFTreeView......?将其转换为ObservableCollection的最佳方式是什么?部分答案是使用ReactiveExtensions(Rx)。您可以从Microsoft开发的NuGet中获取它。在它的帮助下,您可以简单地说:myListCollection.ToObservable();如果你的while(item.Collection!=null||item.Collection.Count==0)总是在同名的节点中,那么你可以使用while(item.Collection!=null||item.Collection.Count==0)并将ToObservable()放入循环假设你的意思是ObservableCollection,如果你想直接将List作为ObservableCollection,只需使用构造函数:varoc=newObservableCollection(yourListOfObject);现在,如果你想解开其中的每一个,你需要做一些工作将它们折叠成一个ObservableCollection。假设您有一个这样定义的节点类:publicclassNode{publicICollectionChildren{get;放;您可以使用递归来转换任何深度级别的列表集合:;返回新的ObservableCollection(节点);我假设你在谈论ObservableCollection。简短的回答,你可以使用一个构造函数:ListmyList=GetList();新的ObservableCollection(我的列表);但是,我认为在分层组织信息方面还有一些工作要做。你是说ObservableCollection?如果您希望子级列表也可以观察到,那么您将需要遍历树并根据需要更改项目,或者单独添加每个项目以开始。在您的类型相同之前,您无法执行此处列出的任何解决方案!例如,如果您的List或ICollection或IEnumerable是字符串类型,但您的ObservableCollection需要是Nodes或Computers或其他类型,您必须先将List放入该类型!我在这些其他伪造的、简化的“解决方案”上浪费了太多时间,而这不是解决方案,因为他们没有解释或考虑到这一点。假设这是您的ObservableCollection:publicclassComputer{publicstringName{get;放;}}很标准,对吧?您最终可能会在任意数量的项目中用任意数量的东西替换计算机。如果您在名为lstComputers的列表中获得计算机名称列表,则不能仅使用以下方法转换它:varoc=newObservableCollection(lstComputers);它会说你有一个类型不匹配并且不能从一个转换为另一个因为你试图将列表推送到ObservableCollection。方孔钉在圆孔中。相反,在获取计算机名称的函数中,您必须将它们全部添加为“特殊”:publicstaticListNetworkComputers(){ListlstComputers=newList();DirectoryEntryroot=newDirectoryEntry("WinNT:");foreach(DirectoryEntrycomputersinroot.Children){foreach(DirectoryEntrycomputerincomputers.Children){if(computer.Name!="Schema"&&computer.SchemaClassName=="Computer"){lstComputers.Add(newComputer(){名称=计算机.名称});}}}}只是因为我们使用了那一行lstComputers.Add(newComputer(){Name=computer.Name});并返回List而不是List我们现在可以将它放入我们的ObservableCollection中。如果您错过了这条船并且不能从一开始就这样做,这个线程讨论了您可以进行转换的其他方法:使用lambda表达式将对象列表从一种类型转换为另一种类型,因此一旦您进入List就可以了:以上就是C#学习教程的全部内容:List转ObservableCollection的最佳方式。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——ListlstComputers=NetworkComputers();varoc=newObservableCollection(lstComputers);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
