Проблема с ExtensionInfo Binding
Atom
09.07.2010


Михал, вечер добрый.

В примере с экспортом инструментов волатильность и теор цена не
обновляются в реальном времени. Думаю дело в том, что они биндятся к
объекту Security, а не к полю. Если их забиндить через
Path=ExtensionInfo и написать конвертер, то данные все равно не
обновляются в реальном времени, хотя на ранних версиях S# это
работало.... В чем может быть причина? ExtensionInfo больше не
свойство зависимости? или не реализует INotifyPropertyChanged?

Теги:


Спасибо:


1 2  >
Mikhail Sukhov

Фотография
Дата: 09.07.2010
Ответить


Я думаю Вы правы. Это сложна структура и с ней такой простой ход как
INotifyPropertyChanged не пройдет. Используйте подход как с
SampleQuote (который читает данные из Quote.ExtensionInfo ).

Спасибо:

Александр Сопов

Фотография
Дата: 10.07.2010
Ответить


Но ведь класс Security уже реализует INotifyPropertyChanged, и при
изменении всех полей кроме ExtensionInfo соответствующие события
посылаются. В версии 2.01 ExtensionInfo также генерировало
RaisedPropertyChanged... Почему в 2.1 этого больше не происходит?
Сейчас приходится опрашивать ExtensionInfo по таймеру, как в подходе с
SampleQuote, что не есть гуд.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 12.07.2010
Ответить


ExtensionInfo не могло генерировать RaisedPropertyChanged - это
Dictionary из .NET, который ничего не знает о INotifyPropertyChanged.

Сильно неудобно? Посмотрю, что можно сделать. Но это будет не раньше
новой версии. Как обходной путь сейчас, не использовать таймер, а
использовать ITrader.SecuritiesChanged. Из него заполнять структуру
VisualSecurity через нужное свойство. Которой в свою очередь бросает
событие PropertyChanged. И форма преспокойно это отображает. Это более
правильно чем через таймер.

Спасибо:

Александр Сопов

Фотография
Дата: 12.07.2010
Ответить


Михаил, Вы правы, дикшенари ничего не знает о интерфейсе, и
реализовать дифференцированный отклик на изменение каждой записи не
так просто. Но ведь можно сделать "компромиссный" вариант - код,
который заполняет или изменяет дикшенари, может отправлять
RaisedPropertyChanged("ExtensionInfo"). То есть форма будет обновлять
все поля при изменении какой-либо записи в ExtensionInfo. Не так чтобы
очень сильно нужно, но это ведь просто реализовать. Поправте меня,
если ошибаюсь. Идея с VisualSecurity тоже не очень удобно, сильно
запутывает код.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 13.07.2010
Ответить


Просто то просто, только все равно фичи раньше след. версии не смогу
выпустить. А к следующей версии лучше сделать по правильному (как пока
не знаю). Вам это только для обновления данных на форме?

Спасибо:

Александр Сопов

Фотография
Дата: 14.07.2010
Ответить


Да, это только для формы, поэтому не к спеху, пока хватает и таймера.
Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


Кажется я немного не понимаю как должны обновляться дополнительные
поля у Security...

Для каждого из QuikTrader, входящих в MultiTrader я добавил нужные мне
поля:

quikTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MarginBuy);

quikTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MarginSell);

quikTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);

quikTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

quikTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinStepPrice);
(Все эти поля есть в таблице квика.)

Пробую печатать из стратегии:
AddLog(StrategyErrorStates.None, "ГО ({0}), minPrice
({1}), minStepPrice ({2})",
new object[]
{
Security.MarginBuy,
Security.MinPrice,
Security.MinStepSize,
});

Сегодня после клиринга изменилась печать лишь для ГО, для MinPrice и
для MinStepPrice осталась прежней.
Печать через
try
{
AddLog(StrategyErrorStates.None, "ГО_2 ({0})", new
object[]

{

(double)Security.ExtensionInfo[DdeSecurityColumns.MarginBuy]
});
}
catch (Exception)
{

AddLog(StrategyErrorStates.None, "Не удалось получить
ГО_2", new object());
}
выбрасывает exception.

Как сделать так, чтоб автоматически обновлялись и MinPrice,
MinStepPrice, ...?
Спасибо:

Mikhail Sukhov

Фотография
Дата: 16.08.2010
Ответить


1. Так может и не обновилось?
2. (double)Security.ExtensionInfo[DdeSecurityColumns.MarginBuy] Так
нельзя. Все таки надо через отдельное свойство Security.MarginBuy .
3. ProcessDataError ничего не пишет?

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


1) Обновилось точно - смотрю по таблице в квике, данные другие чем по
дебагеру ловлю.
Только что проверил ещё раз - остановил стратегию, посмотрел Security
в стратегии в вижуал студии, не обновилось.
3) нет, ни одного сообщения не поступало

Спасибо:

Mikhail Sukhov

Фотография
Дата: 16.08.2010
Ответить


Security - что был получен через NewSecurities или ручками создан?

Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy