← Назад

Не загружаются сохранённые настройки PortfolioGrid из xml

Здравствуйте.

Имею контрол <xaml:PortfolioGrid x:Name="PortfolioGrid" />

Методы Save и Load

public void Load(SettingsStorage storage) { if (storage != null) { if (storage.Contains(nameof(_testPortfolios))) if (storage.Contains(nameof(PortfolioGrid))) { PortfolioGrid.Load(storage.GetValue<SettingsStorage>(nameof(PortfolioGrid))); } } else { // TODO: add log } }
    public void Save(SettingsStorage storage)
    {
        if (storage != null)
        {
            storage.SetValue(nameof(_testPortfolios), _testPortfolios);
            storage.SetValue(nameof(PortfolioGrid), PortfolioGrid.Save());

            new XmlSerializer<SettingsStorage>().Serialize(storage, $@"{_SETTINGS_DIR}/{_SETTINGS_FILE}");
        }
        else
        {
            // TODO: add log
        }
    }

Реализация методов Load(new XmlSerializer<SettingsStorage>().Deserialize($@"/")); Save(new XmlSerializer<SettingsStorage>().Deserialize($@"/"));

C _testPortfolios всё работает С PortfolioGrid и вариант с PortfolioGrid.Load(storage); не срабатывает

Файл сохранённых настроек historyEmulationConnectorSettings.xml

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

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

Support
Support

Добрый день

Какая-то ошибка или настройки не восстанавливаются?

Дмитрий_
Дмитрий_ Автор

Ошибки нет, не восстанавливаются настройки.

Support
Support

Модифицированный пример работает. Кнопка Save после получения портфелей. Кнопка Load после изменения порядка колонок, ширина и т.д. Состояние восстанавливается.

<Grid>
		<Grid.RowDefinitions>
			<RowDefinition Height="*" />
			<RowDefinition Height="Auto" />
		</Grid.RowDefinitions>
		
		<xaml:PortfolioGrid x:Name="PortfolioGrid" x:FieldModifier="public" />
	<StackPanel Grid.Row="1" Orientation="Horizontal">
		<Button x:Name="Save" Click="Save_Click" Content="Save"/>
		<Button x:Name="Load" Click="Load_Click" Content="Load"/>	
	</StackPanel>
	</Grid>

private SettingsStorage _s;

		private void Save_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			_s = PortfolioGrid.Save();
		}

		private void Load_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			PortfolioGrid.Load(_s);
		}
Дмитрий_
Дмитрий_ Автор

Не работает.

В демонстрационных целях создал мини-проект, в котором при открытии дочернего окна загружаются настройки PortfolioGrid, при добавлении портфеля в PortfolioGrid - сохраняются настройки.

PortfolioGridLoader.zip

Support
Support

Добрый день

Попробуйте наш пример с последним API и модификацией выше. Работает ли у вас данный код?

Дмитрий_
Дмитрий_ Автор

Добрый день.

Тестировал с package id="StockSharp" version="4.4.16", если я правильно понимаю, то это последний API. Всё равно не работает.

Возможно важно указать в описании, что я добавляю не реальный портфель, а тестовый.

Переделал проект под ваш пример и добавил две кнопки:

  • Add (добавляет портфель)
var newPortfolio = new Portfolio() { Name = "Test_" + _portfolioNumber++, BeginValue = 1000000 }; _pList.Add(newPortfolio); PortfolioGrid.Portfolios.Add(newPortfolio);
  • Remove (удаляет портфель)
PortfolioGrid.Portfolios.Remove(_pList.First()); _pList.Remove(_pList.First());

Совершаю следующие действия: Add, Add (два портфеля) Save, Remove, Remove (пустой PortfolioGrid) Load (пустой PortfolioGrid) - не загружает то состояние, когда в PortfolioGrid было два портфеля.

PortfolioGridLoader.zip

Иван З.
Иван З.

Дмитрий Антипов: Добрый день.

Тестировал с package id="StockSharp" version="4.4.16", если я правильно понимаю, то это последний API. Всё равно не работает.

Возможно важно указать в описании, что я добавляю не реальный портфель, а тестовый.

Переделал проект под ваш пример и добавил две кнопки:

  • Add (добавляет портфель)

var newPortfolio = new Portfolio() { Name = "Test_" + _portfolioNumber++, BeginValue = 1000000 };

        _pList.Add(newPortfolio);
        PortfolioGrid.Portfolios.Add(newPortfolio);
  • Remove (удаляет портфель)

PortfolioGrid.Portfolios.Remove(_pList.First());

        _pList.Remove(_pList.First());

Совершаю следующие действия: Add, Add (два портфеля) Save, Remove, Remove (пустой PortfolioGrid) Load (пустой PortfolioGrid) - не загружает то состояние, когда в PortfolioGrid было два портфеля.

PortfolioGridLoader.zip Попробуйте декомпилировать PortfolioGrid и поймете, что он не сохраняет портфели. И наверное не должен графический элемент за это отвечать.

Дмитрий_
Дмитрий_ Автор

Иван З.: Попробуйте декомпилировать PortfolioGrid и поймете, что он не сохраняет портфели. И наверное не должен графический элемент за это отвечать.

Спасибо за вариант. Данный вопросом я хочу найти ответ на смежные вопросы. Например в Shell в файле PortfolioGridControl используются методы PortfolioGrid.Load(storage); PortfolioGrid.Save(storage); и они работают.

Support
Support

Последняя версия 5.0

Дмитрий_
Дмитрий_ Автор

Не работает. Установил version="5.0.4" targetFramework="net48" packages.config

Support
Support

Вы пробовали наш пример с модификацией выше?

Дмитрий_
Дмитрий_ Автор

Support: Вы пробовали наш пример с модификацией выше? Пробывал, я проект написал (прикреплен выше) в котором используются данные методы. Посмотрите его, может я чего-то пропустил и не учитываю.