/// <summary> /// Handles the CollectionChanged event for the ItemsSource property. /// </summary> /// <param name="sender">Event source.</param> /// <param name="e">Event arguments..</param> private void ItemsSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (null != ParentDefinitionSeries) { ParentDefinitionSeries.SeriesDefinitionItemsSourceCollectionChanged(this, e.Action, e.OldItems, e.OldStartingIndex, e.NewItems, e.NewStartingIndex); } }
/// <summary> /// Resets the display of the series definition. /// </summary> private void Reset() { if (null != ParentDefinitionSeries) { ParentDefinitionSeries.SeriesDefinitionItemsSourceChanged(this, ItemsSource, ItemsSource); } }
/// <summary> /// Handles changes to the ItemsSource property. /// </summary> /// <param name="oldValue">Old value.</param> /// <param name="newValue">New value.</param> private void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue) { // Remove handler for oldValue.CollectionChanged (if present) INotifyCollectionChanged oldValueINotifyCollectionChanged = oldValue as INotifyCollectionChanged; if (null != oldValueINotifyCollectionChanged) { // Detach the WeakEventListener if (null != _weakEventListener) { _weakEventListener.Detach(); _weakEventListener = null; } } // Add handler for newValue.CollectionChanged (if possible) INotifyCollectionChanged newValueINotifyCollectionChanged = newValue as INotifyCollectionChanged; if (null != newValueINotifyCollectionChanged) { // Use a WeakEventListener so that the backwards reference doesn't keep this object alive _weakEventListener = new WeakEventListener <SeriesDefinition, object, NotifyCollectionChangedEventArgs>(this); _weakEventListener.OnEventAction = (instance, source, eventArgs) => instance.ItemsSourceCollectionChanged(source, eventArgs); _weakEventListener.OnDetachAction = (weakEventListener) => newValueINotifyCollectionChanged.CollectionChanged -= weakEventListener.OnEvent; newValueINotifyCollectionChanged.CollectionChanged += _weakEventListener.OnEvent; } if (null != ParentDefinitionSeries) { ParentDefinitionSeries.SeriesDefinitionItemsSourceChanged(this, oldValue, newValue); } }