← Zurück

Save() Load()

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

Kommentare (8)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support

Добрый день

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

Константин
Константин Autor

Не могу загрузить сохраненные настройки и восстановить все добавленные элементы. Файл с настройками создается и загружается в 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 и он восстанавливает состояние. Что именно у вас не появляется при загрузке настроек из файла?

Константин
Константин Autor

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


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

Support
Support

Добрый день

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

Константин
Константин Autor

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

Support
Support

Добрый день

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

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

Добрый день

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

Константин