2

我有一个这样创建的 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 不存在,我真的很困惑,因为刚创建图表时效果很好,使用硬编码值,我认为更新它必须只是一个步骤,但找不到如何.

4

2 回答 2

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 } );
于 2011-05-22T07:15:31.403 回答
0

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

public EngineMeasurementCollection CurrentMeasurements

到我的图表页面,它工作得很好,不知道这样编码是否有任何影响。

于 2011-05-23T19:54:07.653 回答