将ObservableCollection的内容写入文本文件

时间:2014-02-05 21:57:46

标签: c# wpf file-io observablecollection

此问题的目标是找到获取ObservableCollection(具体)strings的具体内容的方法,并将其写入文本文件。

此集合是使用节点构建的,因为它用于实现TreeView。话虽如此,我正在尝试获取父节点的子值,如下所示:

//I am currently getting an InvalidOperationException -- Sequence contains no matching element
var Node = Collection.GetAllChildren(x => x.Children).Distinct().ToList().First(x => x.DisplayName == Name);

为了写入文件,我使用的是File.方法:File.WriteAllLines()。我的理解是,此方法采用FileName,然后采用IEnumerable(a List等)。 ObservableCollection是否包含IEnumberable兼容的方法,还是需要将内容添加到List

现在我正在尝试写入文件行:

File.WriteAllLines(FileName, new ObservableCollection<string> { ViewModel.Data.ToList() });

如何纠正我的代码中的这两个有害部分?获取所需信息,然后将其添加到文件的正确方法是什么?

更新:这些是我在上面的代码行中收到的当前错误。如果我正确地实现这个(我是基于答案),为什么我收到这些编译错误? (注意:type已切换为string

更新2:我已更新要写入文件的参数。 DataObservableCollection<ViewModel>

enter image description here

2 个答案:

答案 0 :(得分:2)

是的,File.WriteAllLines的重载需要IEnumerable<string>ObservableCollection<string>实现IEnumerable<string>,因此事情应该有效。

Type应为string

File.WriteAllLines(FileName, new ObservableCollection<Type> ( NodeName.ToList() ));
  

ObservableCollection是否包含IEnumberable方法   兼容

不,它实现 IEnumerable。

P.S。正如在另一个答案中建议的那样,ObservableCollection是多余的。您可以传递任何实现IEnumerable<string>的内容。

答案 1 :(得分:0)

如果查看System.IO.File.WriteAllLines()的签名,它接受一个字符串数组或一个IEnumerable字符串;

试试这个:

File.WriteAllLines(FileName, NodeName.ToList());