2011-06-24 98 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()); 
    } 
}