This question is locked. New answers and comments are not allowed.
Hi,
I am trying to add an Indicator chart to an existing chart.
The chart is defined in below code.
Log is also defined below.
When the page is ran, I get an error: "Value does not fall within the expected range."
Any idea why I am getting this error?
Thanks,
Eitan Barazani
​
I am trying to add an Indicator chart to an existing chart.
The chart is defined in below code.
Log is also defined below.
When the page is ran, I get an error: "Value does not fall within the expected range."
Any idea why I am getting this error?
Thanks,
Eitan Barazani
[DataContract]
public
class
Log
{
[DataMember]
public
LogTypes LogType {
get
;
set
; }
[DataMember]
public
string
Desc {
get
;
set
; }
[DataMember]
public
string
Name {
get
;
set
; }
[DataMember]
public
ResultType Result {
get
;
set
; }
[DataMember]
public
double
Value1 {
get
;
set
; }
[DataMember]
public
double
Value2 {
get
;
set
; }
[DataMember]
public
DateTime TimeStamp {
get
;
set
; }
[DataMember]
public
string
Note {
get
;
set
; }
// Constructor
public
Log()
{
LogType = LogTypes.Appointment;
Desc =
string
.Empty;
Name =
string
.Empty;
Result = ResultType.Normal;
Value1 = 0.0;
Value2 = 0.0;
TimeStamp = DateTime.Now;
Result = ResultType.Normal;
Note =
string
.Empty;
}
// Constructor
public
Log( Log previousLog )
{
LogType = previousLog.LogType;
Desc = previousLog.Desc;
Name = previousLog.Name;
Result = previousLog.Result;
Value1 = previousLog.Value1;
Value2 = previousLog.Value2;
TimeStamp = previousLog.TimeStamp;
Note = previousLog.Note;
}
// Constructor
public
Log( LogTypes type,
string
name,
string
desc,
double
value1, DateTime timeStamp,
string
note )
{
LogType = type;
Name = name;
Desc = desc;
Value1 = value1;
TimeStamp = timeStamp;
Note = note;
}
}
using
System;
using
System.Diagnostics;
using
System.Windows;
using
System.Windows.Media;
using
Microsoft.Phone.Controls;
using
myHealth.Model;
using
Telerik.Charting;
using
Telerik.Windows.Controls;
using
System.Windows.Navigation;
using
System.Collections.ObjectModel;
namespace
myHealth
{
public
partial
class
Graph : PhoneApplicationPage
{
public
App app = Application.Current
as
App;
ObservableCollection<Log> _reportLogs =
new
ObservableCollection<Log>();
private
LineSeries _series0;
private
LineSeries _series1;
public
Graph()
{
InitializeComponent();
}
#region OnNavigateTo & OnNavigatedFrom
protected
override
void
OnNavigatedTo( NavigationEventArgs e )
{
base
.OnNavigatedTo( e );
if
( e.NavigationMode == NavigationMode.New )
{
_reportLogs = StateManager.LoadState<ObservableCollection<Log>>(
"ReportLogs"
);
}
else
{
// No need to do anything
if
( State.ContainsKey(
"ReportLogs"
) )
{
_reportLogs = State[
"ReportLogs"
]
as
ObservableCollection<Log>;
}
else
{
_reportLogs =
new
ObservableCollection<Log>();
}
}
IntializeChart();
SetTrends();
}
protected
override
void
OnNavigatedFrom( NavigationEventArgs e )
{
base
.OnNavigatedFrom( e );
State[
"ReportLogs"
] = _reportLogs;
if
( e.NavigationMode == NavigationMode.Back )
{
// No need to save state
}
else
{
// Save the View variable in the page's State dictionary
}
}
#endregion
private
void
IntializeChart()
{
Debug.WriteLine(
"IntializeChart"
);
_series0 = chart.Series[ 0 ]
as
LineSeries;
_series1 = chart.Series[ 1 ]
as
LineSeries;
if
( ( _series0 ==
null
) ||
( _series1 ==
null
) )
{
return
;
}
_series0.DataPoints.Clear();
_series1.DataPoints.Clear();
double
minimum0 =
double
.MaxValue;
double
maximum0 =
double
.MinValue;
double
minimum1 =
double
.MaxValue;
double
maximum1 =
double
.MinValue;
foreach
( Log item
in
_reportLogs )
{
double
value1 = item.Value1;
double
value2 = item.Value2;
minimum0 = Math.Min( minimum0, value1 );
minimum1 = Math.Min( minimum1, value2 );
maximum0 = Math.Max( maximum0, value1 );
maximum1 = Math.Max( maximum1, value2 );
_series0.DataPoints.Add(
new
CategoricalDataPoint { Value = value1, Category = item.TimeStamp.Date } );
_series1.DataPoints.Add(
new
CategoricalDataPoint { Value = value2, Category = item.TimeStamp.Date } );
}
if
( ( minimum1 == 0.0 ) &&
( maximum1 == 0.0 ) )
{
( chart.VerticalAxis
as
LinearAxis ).Minimum = minimum0;
( chart.VerticalAxis
as
LinearAxis ).Maximum = maximum0;
}
else
{
( chart.VerticalAxis
as
LinearAxis ).Minimum = Math.Min( minimum0, minimum1 );
( chart.VerticalAxis
as
LinearAxis ).Maximum = Math.Max( maximum0, maximum1 );
}
Debug.WriteLine(
"IntializeChart - Done"
);
}
#if never
trendBase =
new
MovingAverageIndicator();
trendBase =
new
ExponentialMovingAverageIndicator();
trendBase =
new
ModifiedMovingAverageIndicator();
trendBase =
new
ModifiedExponentialMovingAverageIndicator();
trendBase =
new
WeightedMovingAverageIndicator();
trendBase =
new
AdaptiveMovingAverageKaufmanIndicator();
#endif
private
void
SetTrends()
{
ValuePeriodIndicatorBase trendBase;
const
int
trendsIndex = 0;
trendBase =
new
MovingAverageIndicator
{
CategoryBinding =
new
PropertyNameDataPointBinding { PropertyName =
"Date"
},
ValueBinding =
new
PropertyNameDataPointBinding { PropertyName =
"Close"
},
Stroke =
new
SolidColorBrush( Colors.Red ),
StrokeThickness = 1,
Period = 5,
ItemsSource = _series0.DataPoints
};
chart.Indicators.Clear();
chart.Indicators.Add( trendBase );
}
}
}
<
phone:PhoneApplicationPage
x:Class
=
"myHealth.Graph"
xmlns:chart
=
"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Chart"
xmlns:chartEngine
=
"clr-namespace:Telerik.Charting;assembly=Telerik.Windows.Controls.Chart"
xmlns:phone
=
"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell
=
"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
d:DesignHeight
=
"768"
d:DesignWidth
=
"480"
FontFamily
=
"{StaticResource PhoneFontFamilyNormal}"
FontSize
=
"{StaticResource PhoneFontSizeNormal}"
Foreground
=
"{StaticResource PhoneForegroundBrush}"
Orientation
=
"Portrait"
shell:SystemTray.IsVisible
=
"True"
SupportedOrientations
=
"PortraitOrLandscape"
mc:Ignorable
=
"d"
>
<!-- LayoutRoot is the root grid where all page content is placed -->
<
Grid
x:Name
=
"LayoutRoot"
>
<
Grid.Background
>
<
LinearGradientBrush
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"RoyalBlue"
/>
<
GradientStop
Color
=
"#FF1e90ff"
Offset
=
"0.3"
/>
</
LinearGradientBrush
>
</
Grid.Background
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"*"
/>
</
Grid.RowDefinitions
>
<!-- TitlePanel contains the name of the application and page title -->
<
StackPanel
x:Name
=
"TitlePanel"
Grid.Row
=
"0"
Margin
=
"12,17,0,28"
>
<
TextBlock
x:Name
=
"ApplicationTitle"
Style
=
"{StaticResource PhoneTextNormalStyle}"
Text
=
"myHealth"
/>
<
TextBlock
x:Name
=
"PageTitle"
Margin
=
"9,-7,0,0"
Style
=
"{StaticResource PhoneTextTitle1Style}"
Text
=
"Graph"
FontSize
=
"60"
/>
</
StackPanel
>
<!-- ContentPanel - place additional content here -->
<
Grid
x:Name
=
"ContentPanel"
Grid.Row
=
"1"
Margin
=
"12,0,12,0"
>
<
chart:RadCartesianChart
x:Name
=
"chart"
Margin
=
"0,0,17,25"
>
<
chart:RadCartesianChart.HorizontalAxis
>
<
chart:DateTimeCategoricalAxis
x:Name
=
"dateTimeContinuousAxis"
Foreground
=
"White"
DateTimeComponent
=
"DayOfYear"
LabelFitMode
=
"Rotate"
LabelRotationAngle
=
"315"
FontSize
=
"12"
FontWeight
=
"SemiBold"
LabelFormat
=
"MMMdd"
PlotMode
=
"OnTicks"
TickThickness
=
"2"
/>
</
chart:RadCartesianChart.HorizontalAxis
>
<!--Zoom and Pan-->
<
chart:RadCartesianChart.Behaviors
>
<
chart:ChartPanAndZoomBehavior
ZoomMode
=
"Horizontal"
PanMode
=
"Horizontal"
/>
</
chart:RadCartesianChart.Behaviors
>
<!--Grid-->
<
chart:RadCartesianChart.Grid
>
<
chart:CartesianChartGrid
MajorLinesVisibility
=
"XY"
MajorXLinesRenderMode
=
"All"
Style
=
"{StaticResource GridStyleDashedAll}"
>
<
chart:CartesianChartGrid.MajorXLineStyle
>
<
Style
TargetType
=
"Line"
>
<
Setter
Property
=
"Stroke"
Value
=
"{StaticResource SolidBlackBrush}"
/>
</
Style
>
</
chart:CartesianChartGrid.MajorXLineStyle
>
<
chart:CartesianChartGrid.MajorYLineStyle
>
<
Style
TargetType
=
"Line"
>
<
Setter
Property
=
"Stroke"
Value
=
"{StaticResource SolidBlackBrush}"
/>
</
Style
>
</
chart:CartesianChartGrid.MajorYLineStyle
>
</
chart:CartesianChartGrid
>
</
chart:RadCartesianChart.Grid
>
<!--Vertical Axis-->
<
chart:RadCartesianChart.VerticalAxis
>
<
chart:LinearAxis
x:Name
=
"verticalAxis"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Left"
Foreground
=
"White"
/>
</
chart:RadCartesianChart.VerticalAxis
>
<
chart:RadCartesianChart.Series
>
<
chart:LineSeries
Stroke
=
"Orange"
StrokeThickness
=
"2"
ClipToPlotArea
=
"False"
/>
<
chart:LineSeries
Stroke
=
"Red"
StrokeThickness
=
"2"
ClipToPlotArea
=
"False"
/>
<
chart:LineSeries
Stroke
=
"Blue"
StrokeThickness
=
"2"
ClipToPlotArea
=
"False"
/>
<
chart:LineSeries
Stroke
=
"DarkGreen"
StrokeThickness
=
"2"
ClipToPlotArea
=
"False"
/>
</
chart:RadCartesianChart.Series
>
</
chart:RadCartesianChart
>
</
Grid
>
</
Grid
>
</
phone:PhoneApplicationPage
>
​