将 ObservableCollection 保存到文件 (.txt)

Posted

技术标签:

【中文标题】将 ObservableCollection 保存到文件 (.txt)【英文标题】:Saving ObservableCollection to file (.txt) 【发布时间】:2011-06-24 14:10:55 【问题描述】:

对我来说,将我在列表视图中显示的 observableCollection 数据保存到文件 (.txt) 的最佳方式是什么?当我没有 observableCollection 和下面显示的绑定数据时,我让它工作,为此我只是使用了一个字符串生成器。从下面的代码中如何保存“进程名称”

XAML 代码

<ListView Height="146"  ScrollBar.Scroll="listView1_Scroll" ItemsSource="Binding StatisticsCollection">   <ListView.View>
   <GridView >
      <GridViewColumn Header="Process Name" Width="80" DisplayMemberBinding="Binding ProcessName" />
   </GridView>
</Listview.View>

用于工作的字符串生成器

System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (object item in listView1.Items)

    sb.AppendLine(item.ToString());

声明

 ObservableCollection<StatisticsData> _StatisticsCollection =
    new ObservableCollection<StatisticsData>();

    public ObservableCollection<StatisticsData> StatisticsCollection
    
        get  return _StatisticsCollection; 
    

任何反馈都会很棒,

谢谢

马丁

【问题讨论】:

【参考方案1】:

您可以为 ObservableCollection 执行类似的 foreach 循环。

    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    foreach (StatisticsData item in StatisticsCollection)
    

        sb.AppendLine(item.ToString());

    

【讨论】:

我打开时得到的输出是'MemoryMonitor.MainWindow+StatisticsData'。 @carsey88 而不是 item.ToString() 尝试 item.ProcessName 如果这是您要写入文件的每个项目的属性。 使用了 item.ProcessName.Tostring()。非常感谢,快把我逼疯了【参考方案2】:

根据您对“_StatisticsCollection”的命名,我假设您将其保存为字段变量?如果是这样,只需迭代它,并将“ProcessName”属性写入文件/StringBuilder。或者,使用 Linq.Enumerable 扩展方法“Cast”将项目迭代为“StatisticsData”:foreach(listView1.Items.Cast 中的var item)。同样,它是您想要写出的属性“ProcessName”。

【讨论】:

【参考方案3】:

不要使用任何临时变量,这是不必要的。直接写入文件:

using (var writer = new StreamWriter("text.txt"))

    foreach (StatisticsData item in StatisticsCollection)
    
        writer.WriteLine(item.ToString());
    

【讨论】:

以上是关于将 ObservableCollection 保存到文件 (.txt)的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid 保存按钮和 CanExecute

将 ObservableCollection 绑定到 WPF 列表框

将列表框绑定到 ObservableCollection

如何将 ObservableCollection 绑定到 DataTemplate 中的文本框?

如何将 WPF DataGrid 绑定到 ObservableCollection

如何将 ObservableCollection 与 datagrid WPF 绑定