Событие при изменении данных в таблице "Инструменты"


Событие при изменении данных в таблице "Инструменты"
Atom
2/2/2010


Подскажите пожалуйста как можно получить событие, которое происходит
именно при изменении данных в таблице "Инструменты"
NewSecurities конечно не подходит
Пробовал вот так
Securities.CollectionChanged += (X, Y) =>
{

};
где Securities это коллекция типа ObservableCollection
Но все равно происходит это событие один раз при загрузке данных через
дде,дальше молчит.
Может быть подскажите путь решения?
..вообще это мне надо для того, чтобы проверять некоторые условия на
каждом тике, а через событие NewTrades делать не хочется, т.к. там еще
история генерирует это событие.

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 2/2/2010
Reply


Сразу обозначу определения. ObservableCollection - это специальный
класс-коллекция для визуального отображения. Никакого отношения к
торговым объектам она не имеет. Так уж получилось, что ее можно
использовать для этих средств (очень странно что не вызывается
событие, у меня то как раз в примере все нормально).

Еще хотел сказать. Вы в курсе, что QuikTrader работает в многопоточном
режиме? Это означает, что из событий этого класса напрямую нельзя
обращатся к визуальным контролам? Подробности -

http://sergeyteplyakov.blogspot.com/2009/03/windows-forms-controlinvoke.html.
У меня есть вспогательный классы SynchronizedObservableList и
XamlHelper.SyncXXX (первый использует второе).

Я не делал событие SecuritiesChanged из-за того, что не думал, что кто-
то будет работать на неликвидах. С ликвидами такое событие просто не
нужно. Так как Вас запрос не единственный по поводу такого события, я
его уже добавил в след. версию. Сейчас она на стадии стабилизации,
затем допишу примеры и подправлю документацию. Думаю, будет готова в
конце недели.

Thanks:

AndreiFX

Avatar
Date: 2/3/2010
Reply


Я имел ввиду, что Securities в моем примере(также как и у вас в
примере) - это экземпляр класса ObservableCollection, в которое
заносим данные здесь
this.Trader.NewSecurities += securities =>
{
this.Sync(() => this.Securities.AddRange
(securities));

};
Это событие работает нормально,также данные в таблицу, связанную с
Securities идут корректно, обновляются и т.д., но мне нужно именно
событие, которое генерируется, когда не только появляется новый
элемент в коллекции, а когда происходит какое либо изменение...вообщем
будем ждать следующего релиза.
Спасибо
Thanks:

Mikhail Sukhov

Avatar
Date: 2/3/2010
Reply


CollectionChanged должен работать. Именно на основе его контрол Grid
перерисовывает новые значения. Почему Вы решили, что оно не
срабатывает у Вас? Как Вы написали код работы с событием (+
обработчик)?

Thanks:

AndreiFX

Avatar
Date: 2/3/2010
Reply


Securities.CollectionChanged += (X, Y) =>
{

MessageBox.Show("обновление данных");

};

однако месадж бокс выскакивает всего один раз при первом обновлении
данных
Thanks:

AndreiFX

Avatar
Date: 2/3/2010
Reply


Забыл сказать, что этот код я прописал в процедуре при нажатии на
кнопку connect, т.е. там же, где подписываемся на все остальные события
(из Вашего примера)
Thanks:

Mikhail Sukhov

Avatar
Date: 2/3/2010
Reply


Сорри, дошло.

Сам класс Security реализует для визуального обновления интерфейс
INotifyPropertyChanged. Именно его и использую виз. компоненты для
обновления данных. Тоесть, Вам нужно найти нужный инструмент и
подписаться у него на событие PropertyChanged. Тоесть:

this.Trader.NewSecurities += securities =>
{
var sec = securities.Find(s => s.Code == "fgfghghgjh");
((INotifyPropertyChanged)sec).PropertyChanged += delegate
{ MessageBox.Show("обновление данных"); };

Thanks:

AndreiFX

Avatar
Date: 2/3/2010
Reply


Вот, то, что нужно!
только не securities.Find , а securities.First работает...
Спасибо!
Thanks:


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

loading
clippy