2

次のように作成された折れ線グラフがあります。

<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チャートがバインドされているインスタンスとそのインスタンスを作成しています。

したがって、チャートに新しい要素を追加する場合は、このインスタンスを変更する必要があります。これが「LayoutRoot」という名前のリソースであると仮定すると、Gridこのプロパティを追加することでコレクションにアクセスできます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 に答える