/// <summary> /// Создать <see cref="SecurityGrid"/>. /// </summary> public SecurityGrid() { InitializeComponent(); var itemsSource = new ObservableCollectionEx <SecurityItem>(); //var itemsSource = new ObservableCollection<SecurityItem>(); //itemsSource.CollectionChanged += (sender, args) => //{ // var newCount = args.NewItems == null ? 0 : args.NewItems.Count; // var oldCount = args.OldItems == null ? 0 : args.OldItems.Count; // Console.WriteLine("{0:X4} ColChange={1} NewCnt={2} OldCnt={3} NewIdx={4} OldIdx={5}", // GetHashCode(), args.Action, newCount, oldCount, // args.NewStartingIndex, args.OldStartingIndex); //}; //((INotifyPropertyChanged)itemsSource).PropertyChanged += (sender, args) => //{ // Console.WriteLine("{0:X4} PropChange {1}", GetHashCode(), args.PropertyName); //}; ItemsSource = itemsSource; _securities = new ConvertibleObservableCollection <Security, SecurityItem>(new ThreadSafeObservableCollection <SecurityItem>(itemsSource), CreateItem); _selectedSecurities = new SelectedSecurityList(this); MarketDataProvider = ConfigManager.TryGetService <IMarketDataProvider>(); if (MarketDataProvider == null) { ConfigManager.ServiceRegistered += (t, s) => { if (MarketDataProvider != null || typeof(IMarketDataProvider) != t) { return; } MarketDataProvider = (IMarketDataProvider)s; itemsSource.ForEach(item => UpdateData(item.Security, item)); }; } }