четверг, 25 февраля 2010 г.

Сохранение/Загрузка ObservableCollection

Вопрос: How to save, load ObservableCollection?

В принципе задачка Serialize/Deserialize объектов достаточно простая, но вдруг кто не знает.

Создаем класс People

public class People
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BornDate { get; set; }
public string Email { get; set; }
}

Добавляем пространства имен, для удобства.

using System.Collections.ObjectModel;
using System.IO;
using System.Xml.Serialization;

А вот и наша коллекция:

private ObservableCollection<People> _Peoples;


Название файла для сохранения/загрузки лучше оформить отдельной переменной:

private string _FileName = "peoples.data";


Ну а теперь собственно и сами методы.

Загрузка данных:

private void LoadData()
{
if (File.Exists(_FileName))
{
using (var reader = new StreamReader(_FileName))
{
var xs = new XmlSerializer(typeof(ObservableCollection<People>));
_Peoples = (ObservableCollection<People>)xs.Deserialize(reader);
}
}
else
{
_Peoples = new ObservableCollection<People>();
}           
}

Сохранение данных:

private void SaveData()
{
using (var writer = new StreamWriter(_FileName))
{
var xs = new XmlSerializer(typeof(ObservableCollection<People>));
xs.Serialize(writer, _Peoples);
}        
}

Для отображения списка можно воспользоваться ListBoxwpf


Для этого в xaml файл добавляем:

<ListBox x:Name="list" Width="Auto">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}" Width="50"  />
<TextBlock Text="{Binding LastName}" Width="50"/>
<TextBlock Text="{Binding BornDate, StringFormat=d}" Width="60" />
<TextBlock Text="{Binding Email}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>



Исходники проекта

2 комментария:

Анонимный комментирует...

Где исходники? Пусто!

aaz комментирует...

Пофиксил ссылку.