Вы можете достичь этого, например, реализовав статический класс, который управляет вашей пользовательской реализацией, включая сериализацию / десериализацию.
public static class Config
{
public static YourCustomType Data { get; private set; }
public static void LoadXml()
{
Data = YourDeserializationLogic();
}
public static void SaveXml()
{
YourSerializationLogic(Data);
}
}
И если вы хотите использовать все возможности распространения уведомлений об изменениях, вы можете рассмотретьиспользуя отдельные свойства типа ObservableCollection<T>
в вашем статическом классе:
public static ObservableCollection<AnotherCustomType> ObservableData { get; private set; } = new ObservableCollection<AnotherCustomType>();
Просто убедитесь, что в вашей логике LoadXml()
вы должны заполнить эти свойства элемент за элементом, чтобы ObservableCollection генерировал события:
public static void LoadXml()
{
...
foreach (YourType item in YourData)
{
ObservableData.Add(item);
}
}
Я предпочитаю эту опцию по сравнению, например, с синглтоном, потому что у меня есть полный контроль над тем, когда в последовательности запуска вызывается Config.LoadWhatever()
.
Это важнодля меня, потому что мне нравится вести запись для загрузки конфигурации (которая может быть реализована также через синглтон, да - но ИМХО принцип синглетонов недействителен, если соответствующие экземпляры всегда создаются в фиксированном месте в последовательности запуска)хотя я рад узнать о дополнительных преимуществах, если они есть).