I have a chart thats trying to bind to my MVVM and I keep getting an exception inside the radchart from my seriesmapping binding, since as soon as I remove that binding the exception stops throwing.
Object reference not
set
to an instance of an
object
.
at Telerik.Windows.Controls.RadChart.ClearDataSeries()
in
c:\Builds\WPF_Scrum\Release_SL_2010_Q2_SP2\Sources\Development\Controls\Chart\Chart\RadChart.cs:line 1032
at Telerik.Windows.Controls.RadChart.Rebind(Object originalData)
in
c:\Builds\WPF_Scrum\Release_SL_2010_Q2_SP2\Sources\Development\Controls\Chart\Chart\RadChart.cs:line 1014
at Telerik.Windows.Controls.RadChart.ItemsSourcePropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs args)
in
c:\Builds\WPF_Scrum\Release_SL_2010_Q2_SP2\Sources\Development\Controls\Chart\Chart\RadChart.cs:line 852
at Telerik.Windows.PropertyMetadata.<>c__DisplayClass1.<Create>b__0(DependencyObject d, DependencyPropertyChangedEventArgs e)
in
c:\Builds\WPF_Scrum\Release_SL_2010_Q2_SP2\Sources\Development\Core\Controls\Common\System.Windows\PropertyMetadata.cs:line 200
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
at Telerik.Windows.Controls.RadChart.set_ItemsSource(Object value)
in
c:\Builds\WPF_Scrum\Release_SL_2010_Q2_SP2\Sources\Development\Controls\Chart\Chart\RadChart.cs:line 479
at Telerik.Windows.Controls.RadChart.InitializeDesignTimeData()
in
c:\Builds\WPF_Scrum\Release_SL_2010_Q2_SP2\Sources\Development\Controls\Chart\Chart\RadChart.cs:line 1131
at Telerik.Windows.Controls.RadChart.OnApplyTemplate()
in
c:\Builds\WPF_Scrum\Release_SL_2010_Q2_SP2\Sources\Development\Controls\Chart\Chart\RadChart.cs:line 716
at System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
<
telerikChart:RadChart
ItemsSource
=
"{Binding StorageOpsPerSecond}"
BorderThickness
=
"0"
Controls:StyleManager.Theme
=
"Windows7"
Height
=
"300"
Margin
=
"3 0 3 0"
SeriesMappings
=
"{Binding StorageOpsSeriesMapping, Mode=OneWay}"
>
<
telerikChart:RadChart.DefaultView
>
<
telerikCharting:ChartDefaultView
ChartLegendPosition
=
"Bottom"
>
<
telerikCharting:ChartDefaultView.ChartTitle
>
<
telerikCharting:ChartTitle
HorizontalContentAlignment
=
"Stretch"
Content
=
"Storage Operations Per Second"
/>
</
telerikCharting:ChartDefaultView.ChartTitle
>
<
telerikCharting:ChartDefaultView.ChartLegend
>
<
telerikCharting:ChartLegend
x:Name
=
"chartLegend"
/>
</
telerikCharting:ChartDefaultView.ChartLegend
>
<
telerikCharting:ChartDefaultView.ChartArea
>
<
telerikCharting:ChartArea
LegendName
=
"chartLegend"
EnableAnimations
=
"True"
>
<
telerikCharting:ChartArea.AxisX
>
<
telerikCharting:AxisX
LayoutMode
=
"Normal"
IsDateTime
=
"True"
DefaultLabelFormat
=
"h:mm"
AutoRange
=
"True"
LabelRotationAngle
=
"60"
LabelStep
=
"1"
TicksDistance
=
"15"
/>
</
telerikCharting:ChartArea.AxisX
>
</
telerikCharting:ChartArea
>
</
telerikCharting:ChartDefaultView.ChartArea
>
</
telerikCharting:ChartDefaultView
>
</
telerikChart:RadChart.DefaultView
>
</
telerikChart:RadChart
>
public
class
StorageServiceViewModel: ServiceViewModelBase
{
public
List<AzProduct> Products {
get
;
set
;}
public
ObservableCollection<AddRangeObservableCollection<DataPointViewModel>> StorageOpsPerSecond {
get
;
private
set
; }
public
List<SeriesMapping> StorageOpsSeriesMapping
{
get
{
return
Products.Select((t, i) => GetSeriesMapping(i, t.DisplayName)).ToList();}
}
public
StorageServiceViewModel(IAuthenticateService authService, ICustomerService customerService, IMonitorHistoryService monHistoryService, IMonitorCurrentService monCurrentService)
:
base
(authService, customerService, monHistoryService, monCurrentService)
{
StorageOpsPerSecond =
new
ObservableCollection<AddRangeObservableCollection<DataPointViewModel>>();
if
(IsInDesignMode)
{
Products =
customerService.GetProducts(Guid.Empty);
LoadData();
}
}
public
override
void
LoadData()
{
foreach
(AzProduct product
in
Products)
{
StorageProductViewModel spvm =
new
StorageProductViewModel(product, MonitorCurrentService,
MonitorHistoryService);
StorageProducts.Add(spvm);
StorageOpsPerSecond.Add(spvm.TransactionsPerSecond);
spvm.Load();
}
}
public
override
void
LoadProducts(List<AzProduct> products)
{
foreach
(AzProduct product
in
products)
{
if
(product.Type == ProductTypes.EMC || product.Type == ProductTypes.NetApp)
{
Products.Add(product);
}
}
}
private
SeriesMapping GetSeriesMapping(
int
index,
string
displayName)
{
SeriesMapping mapping =
new
SeriesMapping();
mapping.CollectionIndex = index;
mapping.LegendLabel = displayName;
LineSeriesDefinition lsd =
new
LineSeriesDefinition();
lsd.ShowItemLabels =
false
;
lsd.ShowPointMarks =
false
;
lsd.ShowItemToolTips =
true
;
lsd.ItemToolTipFormat =
"#Y"
;
mapping.SeriesDefinition = lsd;
ItemMapping im =
new
ItemMapping();
im.FieldName =
"Timestamp"
;
im.DataPointMember = DataPointMember.XValue;
mapping.ItemMappings.Add(im);
im =
new
ItemMapping();
im.FieldName =
"Value"
;
im.DataPointMember = DataPointMember.YValue;
mapping.ItemMappings.Add(im);
return
mapping;
}
}