using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.Windows; namespace Microsoft.Research.DynamicDataDisplay.DataSources { /// Base class for all sources who receive data for charting /// from any IEnumerable of T /// Type of items in IEnumerable public abstract class EnumerableDataSourceBase : IPointDataSource { private IEnumerable data; /// /// Gets or sets the data. /// /// The data. public IEnumerable Data { get { return data; } set { if (value == null) throw new ArgumentNullException("value"); data = value; var observableCollection = data as INotifyCollectionChanged; if (observableCollection != null) { observableCollection.CollectionChanged += observableCollection_CollectionChanged; } } } protected EnumerableDataSourceBase(IEnumerable data) : this((IEnumerable)data) { } protected EnumerableDataSourceBase(IEnumerable data) { if (data == null) throw new ArgumentNullException("data"); Data = data; } private void observableCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { RaiseDataChanged(); } public event EventHandler DataChanged; public void RaiseDataChanged() { if (DataChanged != null) { DataChanged(this, EventArgs.Empty); } } public abstract IPointEnumerator GetEnumerator(DependencyObject context); } }