Ваша проблема может быть решена очень легко, используя реальную силу .NET Framework.Таким образом, вы избавляетесь от уродливого представления ваших данных.
Прежде всего, создайте класс для хранения ваших данных тревоги:
/// <summary>
/// Class that holds the information of an alarm.
/// </summary>
class Alarm
{
public string Label { get; set; }
public DateTime Time { get; set; }
}
Теперь мы создаем класс, который обслуживаетв качестве поставщика хранилища для XML-файла:
/// <summary>
/// Class that works as a storage provider to the XML file in the isolated storage
/// </summary>
class Storage
{
public const string StorageFileName = "Alarms.xml";
/// <summary>
/// Loads alarms from the storage
/// </summary>
/// <returns>List of alarms</returns>
public ObservableCollection<Alarm> Load()
{
ObservableCollection<Alarm> alarms = new ObservableCollection<Alarm>();
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
if(!storage.FileExists(StorageFileName))
{
return alarms;
}
using(var stream = storage.OpenFile(StorageFileName, System.IO.FileMode.Open))
{
XElement root = XElement.Load(stream);
foreach(var alarmElement in root.Elements("alarm"))
{
alarms.Add(
new Alarm
{
Label = alarmElement.Element("label").Value,
Time = DateTime.Parse(alarmElement.Element("time").Value)
}
);
}
}
return alarms;
}
/// <summary>
/// Saves alarms to the storage file (XML)
/// </summary>
/// <param name="alarms">Alarms to save</param>
public void Save(ObservableCollection<Alarm> alarms)
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
using(var stream = storage.OpenFile(StorageFileName, System.IO.FileMode.Create))
{
XElement root = new XElement("alarms");
// Build
foreach (var alarm in alarms)
{
root.Add(
new XElement("alarm",
new XElement("label", alarm.Label),
new XElement("time", alarm.Time)
)
);
}
root.Save(stream);
}
}
}
Теперь используйте этот объект хранилища для загрузки и сохранения аварийных сигналов на своей странице:
var storage = new Storage();
var myAlarms = storage.Load();
alarmListBox.ItemsSource = myAlarms;
Теперь вам нужно привязать свойстваобъекта Alarm для управления.После этого добавьте кнопку [Сохранить] где-нибудь в вашем пользовательском интерфейсе и вызовите метод Save () класса хранения:
storage.Save(myAlarms);
Вот и все!Простое и чистое решение!Если честно, я не смог протестировать весь код, но это должно сработать ...