private static void SetUpYAxis(BasicChart d) { var MyClass = (BasicChart)d; // Only calcualte the min and max values if AutoScale is true if (MyClass.AutoScale) { double TempYMax, TempYMin; TempYMax = double.MinValue; TempYMin = double.MaxValue; if (MyClass.ItemsSource == null) { return; } foreach (var ClassItem in MyClass.ItemsSource) { IEnumerable MyCollectionItem = (IEnumerable)GetPropValue(ClassItem, MyClass.DataCollectionName); foreach (var item in MyCollectionItem) { double value = (double)GetPropValue(item, MyClass.DisplayMemberValues); if (value < TempYMin) { TempYMin = value; } if (value > TempYMax) { TempYMax = value; } } } MyClass.YMax = TempYMax + (TempYMax - TempYMin) * 0.05d; MyClass.YMin = TempYMin - (TempYMax - TempYMin) * 0.05d; } MyClass.YItems = new ObservableCollection <YAxisLabels>(); double deltaY = (MyClass.YMax - MyClass.YMin) / (MyClass.NumberOfYSteps); for (int j = 0; j <= MyClass.NumberOfYSteps; j++) { var YLabelObject = new YAxisLabels(); YLabelObject.YLabel = (MyClass.YMin + (double)j * deltaY).ToString(MyClass.DoubleToString); YLabelObject.YLocation = ((double)j) * (double)MyClass.PlotHeight / (double)MyClass.NumberOfYSteps; MyClass.YItems.Add(YLabelObject); } }