2011-06-24 76 views
3

对于我将listview中显示的数据的observableCollection保存到文件(.txt)的最佳方法是什么?当我没有observableCollection和下面显示的绑定数据时,我让它工作,因为我只是使用了一个字符串生成器。从下面如何节省使用工作将ObservableCollection保存为文件(.txt)

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; } 
    } 

任何反馈 “过程名”

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> 

StringBuilder的代码会很好,

感谢

马丁

回答

6

你可以做一个类似foreach循环您的ObservableCollection。

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

     sb.AppendLine(item.ToString()); 

    } 
+0

打开时得到的输出是'MemoryMonitor.MainWindow + StatisticsData'。 – carsey88

+0

@ carsey88而不是'item.ToString()'尝试'item.ProcessName',如果这是你想要写入文件的每个项目的属性。 –

+0

used item.ProcessName.Tostring()。非常感谢,让我疯狂 – carsey88

1

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

1

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

using (var writer = new StreamWriter("text.txt")) 
{ 
    foreach (StatisticsData item in StatisticsCollection) 
    { 
     writer.WriteLine(item.ToString()); 
    } 
}