Проблема с ExtensionInfo Binding


Проблема с ExtensionInfo Binding
Atom
7/9/2010


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

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

Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 7/9/2010
Reply


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

Thanks:

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

Avatar
Date: 7/10/2010
Reply


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

Mikhail Sukhov

Avatar
Date: 7/12/2010
Reply


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

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

Thanks:

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

Avatar
Date: 7/12/2010
Reply


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

Mikhail Sukhov

Avatar
Date: 7/13/2010
Reply


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

Thanks:

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

Avatar
Date: 7/14/2010
Reply


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

Alexander

Avatar
Date: 8/16/2010
Reply


Кажется я немного не понимаю как должны обновляться дополнительные
поля у 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, ...?
Thanks:

Mikhail Sukhov

Avatar
Date: 8/16/2010
Reply


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

Thanks:

Alexander

Avatar
Date: 8/16/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 8/16/2010
Reply


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

Thanks:
1 2  >

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

loading
clippy