如何在Silverlight 4中实时更新图表值

时间:2011-05-22 05:53:44

标签: silverlight charts observablecollection linechart

我有一个像这样创建的LineChart:

<Grid.Resources>
                    <local:EngineMeasurementCollection x:Key="EngineMeasurementCollection"/>


                </Grid.Resources>



                    <charting:Chart x:Name="ahorasi" Title="Engine Performance" Margin="-2,0,384,0">
                    <!-- Power curve -->
                    <charting:LineSeries
    Title="Power"
    ItemsSource="{StaticResource EngineMeasurementCollection}"
    IndependentValueBinding="{Binding Speed}"
    DependentValueBinding="{Binding Power}" 

    >
                        <!-- Vertical axis for power curve -->
                        <charting:LineSeries.DependentRangeAxis>
                            <charting:LinearAxis
            Orientation="Y"
            Title="Power (hp)"
            Minimum="0"
            Maximum="250"
            Interval="50"
            ShowGridLines="True"/>
                        </charting:LineSeries.DependentRangeAxis>
                    </charting:LineSeries>
                    <!-- Torque curve -->
                    <charting:LineSeries
    Title="Torque"
    ItemsSource="{StaticResource EngineMeasurementCollection}"
    IndependentValueBinding="{Binding Speed}"
    DependentValueBinding="{Binding Torque}">
                        <!-- Vertical axis for torque curve -->
                        <charting:LineSeries.DependentRangeAxis>
                            <charting:LinearAxis
            Orientation="Y"
            Title="Torque (lb-ft)"
            Minimum="50"
            Maximum="300"
            Interval="50"/>
                        </charting:LineSeries.DependentRangeAxis>
                    </charting:LineSeries>
                    <charting:Chart.Axes>
                        <!-- Shared horizontal axis -->
                        <charting:LinearAxis
        Orientation="X"
        Title="Speed (rpm)"
        Interval="1000"
        ShowGridLines="True"/>
                    </charting:Chart.Axes>
                </charting:Chart>

然后我

        public class EngineMeasurementCollection : ObservableCollection<EngineMeasurement>
{
    public EngineMeasurementCollection()
    {
        Add(new EngineMeasurement { Speed = 1000, Torque = 100, Power = 20 });
        Add(new EngineMeasurement { Speed = 2000, Torque = 160, Power = 60 });
        Add(new EngineMeasurement { Speed = 3000, Torque = 210, Power = 125 });
        Add(new EngineMeasurement { Speed = 4000, Torque = 220, Power = 160 });
        Add(new EngineMeasurement { Speed = 5000, Torque = 215, Power = 205 });
        Add(new EngineMeasurement { Speed = 6000, Torque = 200, Power = 225 });
        Add(new EngineMeasurement { Speed = 7000, Torque = 170, Power = 200});

    }



}

public class EngineMeasurement
{
    public int Speed { get; set; }
    public int Torque { get; set; }
    public int Power { get; set; }
}`

当我运行我的项目时,图表工作正常,显示在构造函数中创建的值,但是这是硬编码的,我无法找到添加或删除元素的方式来更新图表。

我甚至不理解为什么图表显示构造函数中提供的项目,是否创建了EngineMeasurementCollection的实例?自动?我没有创建新的EngineMeasurementCollection。

我尝试过类似的事情:

EngineMeasurement littleitem = new EngineMeasurement();
EngineMeasurementCollection fullitems = new EngineMeasurementCollection();
littleitem.Power = 10;
littleitem.Speed = 1000;
littleitem.Torque = 50;
fullitems.Add(littleitem);
//Up to this point everything works perfect, now I want to update my chart with fullitem values in whatever possible way.

我不能做ahorasi.ItemsSource = fullitems因为.ItemsSource不存在,我真的很困惑因为,图表在刚创建时效果很好,带有硬编码值,我认为更新它必须只是一步,但是无法找到。

2 个答案:

答案 0 :(得分:0)

Xaml中的这一行: -

               <local:EngineMeasurementCollection x:Key="EngineMeasurementCollection"/>

正在为EngineMeasurementCollection创建一个实例,并且这个实例是你的图表绑定的。

因此,如果您想在图表中添加新元素,则需要修改此实例。假设Grid这是一个名为“LayoutRoot”的资源,您可以通过向UserControl添加此属性来访问该集合: -

 public EngineMeasurementCollection CurrentMeasurements
 {
      get { return (EngineMeasurementCollection)LayoutRoot.Resources["EngineMeasurementCollection"]; }
 }

现在添加一个附加条目: -

CurrentMeasurements.Add(new EngineMeasurement() { Power = 10, Speed = 1000, Torque = 50 } );

答案 1 :(得分:0)

我的特殊问题已经解决,但对于其他读者来说,我的UserControl页面与我用于图表的页面不同,所以我添加了

public EngineMeasurementCollection CurrentMeasurements

到我的图表页面,它工作得很完美,不知道是否有任何涉及代码的含义。