← Назад

Save() Load()

Добрый день! Что сохраняют и загружают методы Save() и Load()? Если я правильно понимаю то при вызове метода Save() сохраняется текущее состояние объекта, а при следующем создании его и вызова метода Load() восстанавливает сохраненное состояние. Например, если я создам объект график типа ChartPanel, и добавлю в него несколько областей а в области несколько элементов и вызову Save(), то при следующем создании ChartPanel и вызове Load() все созданные области и элементы подгрузятся автоматически?

Комментарии (8)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Support
Support

Добрый день

Да, области восстанавливаются при загрузке.

Константин
Константин Автор

Не могу загрузить сохраненные настройки и восстановить все добавленные элементы. Файл с настройками создается и загружается в SettingsStorage, но график не восстанавливает прежнее состояние. Код такой: Xaml:

<Window x:Class="Chart.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Chart"
        xmlns:charting="http://schemas.stocksharp.com/xaml"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <charting:ChartPanel Name="ChartPanel"/>
    </Grid>
</Window>

С#:

    public partial class MainWindow : Window
    {
        private SettingsStorage SettingsStorage { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            if (File.Exists("Setting.xml"))
            {
                //Загружаем настройки
                SettingsStorage = new XmlSerializer<SettingsStorage>().Deserialize("Setting.xml");
                ChartPanel.Load(SettingsStorage);
                return;
            }
            SettingsStorage = new SettingsStorage();

            //Создаем область и элемент
            var area = new ChartArea();
            area.Elements.Add(new ChartCandleElement());
            ChartPanel.Areas.Add(area);
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            //Сохраняем настройки и закрываем приложение
            ChartPanel.Save(SettingsStorage);
            new XmlSerializer<SettingsStorage>().Serialize(SettingsStorage, "Setting.xml");
            base.OnClosing(e);
        }
    }

Что я делаю не так?

Support
Support

Добрый день

Мы протестировали ваш код на примере SampleChart и он восстанавливает состояние. Что именно у вас не появляется при загрузке настроек из файла?

Константин
Константин Автор

При загрузке настроек из файла ChartPanel.Load(SettingsStorage) не создается ChartArea и вложенный ChartCandleElement. Может я не правильно понимаю логику метода Load(). Он должен создавать области и элементы на графике самостоятельно? Вот так:


var area = new ChartArea();
area.Elements.Add(new ChartCandleElement());
ChartPanel.Areas.Add(area);

Support
Support

Добрый день

Да должен. В примере SampleChart создаются области и элементы.

Константин
Константин Автор

Я смотрел пример SampleChart и не нашел вызова методов Chart.Load() и Chart.Save(). Инициализация чарта происходит в методе RefreshCharts который вызывается по событию MainWindow.Load и по событию клика по кнопке. Представленный выше код проверил на 4.4.14

Support
Support

Добрый день

Мы вставили ваш код в пример и состояние восстанавливалось после перезагрузки.

Константин
Support
Support

Добрый день

К предыдущему сообщению добавлен изменённый файл примера с вашим кодом. После добавления дополнительных областей перезапустите программу и получите восстановленный при повторном запуске график с несколькими областями.

Константин