This sample raises NullReferenceException in tha AxisX.CalculateItemRange method
View:
<Window.Resources>
<DataTemplate x:Key=
"measTemplate"
>
<telerik:RadChart ItemsSource=
"{Binding ChartData, Mode=OneWay}"
>
<telerik:RadChart.DefaultView>
<telerik:ChartDefaultView>
<telerik:ChartDefaultView.ChartLegend>
<telerik:ChartLegend UseAutoGeneratedItems=
"True"
Header=
" "
x:Name=
"chartLegend"
>
</telerik:ChartLegend>
</telerik:ChartDefaultView.ChartLegend>
<telerik:ChartDefaultView.ChartArea>
<telerik:ChartArea LegendName=
"chartLegend"
EnableAnimations=
"True"
>
<telerik:ChartArea.AxisX>
<telerik:AxisX />
</telerik:ChartArea.AxisX>
<telerik:ChartArea.AxisY>
<telerik:AxisY DefaultLabelFormat=
"F2"
/>
</telerik:ChartArea.AxisY>
<telerik:ChartArea.AdditionalYAxes>
<telerik:AxisY AxisName=
"Secondary"
DefaultLabelFormat=
"F2"
/>
</telerik:ChartArea.AdditionalYAxes>
</telerik:ChartArea>
</telerik:ChartDefaultView.ChartArea>
</telerik:ChartDefaultView>
</telerik:RadChart.DefaultView>
<telerik:RadChart.SeriesMappings>
<telerik:SeriesMapping LegendLabel=
"R"
>
<telerik:SeriesMapping.SeriesDefinition>
<telerik:LineSeriesDefinition ShowItemLabels=
"False"
AxisName=
"Secondary"
/>
</telerik:SeriesMapping.SeriesDefinition>
<telerik:ItemMapping FieldName=
"ValueY"
DataPointMember=
"YValue"
/>
<telerik:ItemMapping FieldName=
"ValueX"
DataPointMember=
"XValue"
/>
</telerik:SeriesMapping>
<telerik:SeriesMapping LegendLabel=
"C"
>
<telerik:SeriesMapping.SeriesDefinition>
<telerik:LineSeriesDefinition ShowItemLabels=
"False"
/>
</telerik:SeriesMapping.SeriesDefinition>
<telerik:ItemMapping FieldName=
"ValueY1"
DataPointMember=
"YValue"
/>
<telerik:ItemMapping FieldName=
"ValueX"
DataPointMember=
"XValue"
/>
</telerik:SeriesMapping>
</telerik:RadChart.SeriesMappings>
</telerik:RadChart>
</DataTemplate>
</Window.Resources>
<DockPanel>
<ItemsControl ItemsSource=
"{Binding Context.Charts}"
ItemTemplate=
"{StaticResource measTemplate}"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns=
"1"
/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DockPanel>
View CodeBehind
public
partial
class
MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
this
.Context =
new
Context();
this
.DataContext =
this
;
}
public
Context Context {
get
;
set
; }
}
public
class
Context
{
public
Context()
{
this
.Charts =
new
ObservableCollection<ChartDataHolder>();
for
(
int
i = 0; i < 2; i++)
{
this
.Charts.Add(
new
ChartDataHolder());
}
}
public
ObservableCollection<ChartDataHolder> Charts {
get
;
private
set
; }
}
ViewModel:
public
class
ChartDataHolder
{
private
readonly
BackgroundWorker worker =
new
BackgroundWorker();
public
ChartDataHolder()
{
this
.ChartData =
new
ObservableCollection<ChartDataItem>();
worker.DoWork +=
this
.worker_DoWork;
this
.worker.RunWorkerAsync();
}
void
worker_DoWork(
object
sender, DoWorkEventArgs e)
{
Thread.Sleep(TimeSpan.FromSeconds(1));
//!! Without it it works fine
while
(
true
)
{
for
(
int
i = 0; i < 2; i++)
{
Application.Current.Dispatcher.BeginInvoke(
new
Action(
this
.ProcessResult),
null
);
}
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}
private
void
ProcessResult()
{
this
.ChartData.Clear();
for
(
int
i = 0; i < 20; i++)
{
this
.ChartData.Add(
new
ChartDataItem() { ValueX = DateTime.Now.Second + i, ValueY = DateTime.Now.Second + i });
}
}
public
ObservableCollection<ChartDataItem> ChartData {
get
;
private
set
; }
}