Save() Load()


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




Thanks:


Support

Avatar
Date: 10/11/2018
Reply


Добрый день

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

Thanks:

Константин

Avatar
Date: 10/11/2018
Reply


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

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

Thanks:

Support

Avatar
Date: 10/17/2018
Reply


Добрый день

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

Thanks:

Константин

Avatar
Date: 10/18/2018
Reply


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


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

Thanks:

Support

Avatar
Date: 10/18/2018
Reply


Добрый день

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

Thanks:

Константин

Avatar
Date: 10/18/2018
Reply


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

Thanks:

Support

Avatar
Date: 10/20/2018
Reply


Добрый день

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

MainWindow.xaml.cs 18 KB (569)
Thanks: Константин

Support

Avatar
Date: 10/24/2018
Reply


Добрый день

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

Thanks: Константин


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy