Вопрос: 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); } }
Для отображения списка можно воспользоваться ListBox
Для этого в 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 комментария:
Где исходники? Пусто!
Пофиксил ссылку.
Отправить комментарий