in

Software FX Community

Discuss and find help for all Software FX products.

ChartFX may throw NullReferenceException if the same item source is reused.

Last post 03-17-2010 4:56 PM by JuanC. 1 replies.
Page 1 of 1 (2 items)
Sort Posts: Previous Next
  • 03-13-2010 11:37 AM

    • djsun
    • Not Ranked
    • Joined on 03-13-2010

    ChartFX may throw NullReferenceException if the same item source is reused.

    I am using 8.0.3712.22025.

    Here is an example:
    The Person type has the Name and the Age notify properties.

    public class Person : INotifyPropertyChanged

    {

    private int age;

    private string name;

    public Person(string name, int age)

    {

    this.name = name;this.age = age;

    }

    public event PropertyChangedEventHandler PropertyChanged;

    public int Age

    {

    get

    {

    return this.age;

    }

    set

    {

    if (this.age != value)

    {

    this.age = value;this.OnPropertyChagned("Age");

    }

    }

    }

    public string Name

    {

    get

    {

    return this.name;

    }

    set

    {

    if (this.name != value)

    {

    this.name = value;this.OnPropertyChagned("Name");

    }

    }

    }

    protected virtual void OnPropertyChagned(string propName)

    {

    var h = this.PropertyChanged;if (h != null)

    {

    h(
    this, new PropertyChangedEventArgs(propName));

    }

    }

    }

    The Chart window has a simple chart, a load button to reload the data and a change button to modify the first Person's Age.

    <Window

    x:Class="ChartFXWpfApplication1.ChartNotStopListenPropChange"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window1"

    Height="480"

    Width="640"

    xmlns:cfx="http://schemas.softwarefx.com/chartfx/wpf/80">

    <Window.Resources>

    </Window.Resources>

    <Grid>

    <cfx:Chart Name="chart1">

    <cfx:Chart.AxesX>

    <cfx:Axis>

    <cfx:Axis.Title>

    <cfx:Title Content="Name" />

    </cfx:Axis.Title>

    <cfx:Axis.Labels>

    <cfx:AxisLabelAttributes BindingPath="Name" />

    </cfx:Axis.Labels>

    </cfx:Axis>

    </cfx:Chart.AxesX>

    <cfx:Chart.AxesY>

    <cfx:Axis>

    <cfx:Axis.Title>

    <cfx:Title Content="Age" />

    </cfx:Axis.Title>

    </cfx:Axis>

    </cfx:Chart.AxesY>

    </cfx:Chart>

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Bottom">

    <Button x:Name="Reload" Content="Reload" Click="Reload_Click"/>

    <Button x:Name="Change" Content="Change" Click="Change_Click"/>

    </StackPanel>

    </Grid>

    </Window>

    And the code behind:

    public partial class ChartNotStopListenPropChange : Window

    {

    private Random r = new Random();

    private List<Person> source = null;

    public ChartNotStopListenPropChange()

    {

    InitializeComponent();

    this.source = new List<Person>(new[] { new Person("Foo", r.Next(1, 100)) });this.load();

    }

    private void AddSeries(IEnumerable<Person> source, Gallery gallery, int? index)

    {

    var series1 = new SeriesAttributes();

    series1.ItemsSource = source;

    series1.Gallery = gallery;

    series1.Content =
    "Person";series1.BindingPath = "Age";

    chart1.Series.Add(series1);

    }

    private void Change_Click(object sender, RoutedEventArgs e)

    {

    this.source[0].Age += 1;

    }

    private void Clear()

    {

    foreach (var s in chart1.Series)

    {

    s.ItemsSource =
    null;

    }

    chart1.Series.Clear();

    chart1.ItemsSource =
    null;

    }

    private void load()

    {

    Clear();

    AddSeries(
    this.source, Gallery.Bar, 1);

    }

    private void Reload_Click(object sender, RoutedEventArgs e)

    {

    this.load();

    }

    }

    To repro:
    1. Start the application
    2. Click the Reload button
    3. Click the Change button
    At step 3, NullReferenceException was unhandled.

    Filed under: ,
  • 03-17-2010 4:56 PM In reply to

    • JuanC
    • Top 10 Contributor
    • Joined on 03-02-2007

    Re: ChartFX may throw NullReferenceException if the same item source is reused.

    We have fixed this issue in build 3728

    Regards,

    JuanC

Page 1 of 1 (2 items)
Copyright 2008 Software FX, Inc.