Доступ к объекту в любом месте приложения (C # / WPF) - PullRequest
0 голосов
/ 13 ноября 2018

Я десериализирую XML-документ в пользовательский объект, и мне нужно, чтобы эти данные были доступны в любом месте всего приложения.

Я создаю экземпляр этого открытого класса в MainWindow.xaml.cs и не могувыяснить, как получить доступ к этому объекту из других UserControls и ViewModels.

Каковы некоторые рекомендации и примеры?

Думайте об этом объекте как о хранении всех данных моего приложения, которые я хочу иметьчитать, обновлять и сохранять с любого экрана.(Некоторые данные могут быть сложными, поэтому я не хочу сохранять их в настройках. Мне нужно читать и записывать в файл XML.)

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы можете достичь этого, например, реализовав статический класс, который управляет вашей пользовательской реализацией, включая сериализацию / десериализацию.

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().

Это важнодля меня, потому что мне нравится вести запись для загрузки конфигурации (которая может быть реализована также через синглтон, да - но ИМХО принцип синглетонов недействителен, если соответствующие экземпляры всегда создаются в фиксированном месте в последовательности запуска)хотя я рад узнать о дополнительных преимуществах, если они есть).

0 голосов
/ 13 ноября 2018

Что я сделал, так это использовал службу, которая хранит текущие данные или как вы хотите их называть.Я внедряю его в классы как одноэлементный, поэтому все классы имеют одинаковые ссылки.На стороне веб-клиента это называется хранилищем данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...