← 戻る

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

Добрый день

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

Константин