2017-07-20 11 views
-1

WPFにグラフを表示してグラフを表示し、グラフがDisplayPointsというリストにバインドされ、スライダの値が変更されたときに1点がDisplayPointsに移動されますグラフに表示されます。これは、グラフのXAMLです:Slider not triggering各値のValueChangedが渡される

<oxy:Plot Name="Plot" Margin="0,0,10,0" Background="WhiteSmoke"> 
    <oxy:Plot.Series> 
     <oxy:LineSeries ItemsSource="{Binding DisplayPoints}" Color="Transparent" MarkerFill="SteelBlue" MarkerType="Circle"/> 
    </oxy:Plot.Series> 
    <oxy:Plot.Axes> 
     <oxy:LinearAxis Position="Left" Minimum="0" Maximum="{Binding BuildPlateSize}"/> 
     <oxy:LinearAxis Position="Bottom" Minimum="0" Maximum="{Binding BuildPlateSize}"/> 
    </oxy:Plot.Axes> 
</oxy:Plot> 

私も要件がすることであるため、これは、私は現在、ValueChangedイベントとそのイベントを処理しています、グラフに示されたプロットの%を制御し、このグラフの下のスライダーを持っていますそれは全体のスライドとされているようなグラフの更新を持っていない、それがフォーカスを失った後など、このスライダのXAMLである:

最大グラフが有するしかし、多くの点に設定し、そしてためティックを作成していますスライダーに沿った各値私はそれが高速にスライドさせると、スライダーの摺動を扱う問題が生じています

public async void ProgressSliderEvent(object sender, System.Windows.RoutedPropertyChangedEventArgs<double> e) 
    { 
     if (e.NewValue > e.OldValue) 
     { 
      await this.mainWindow.DisplayNewPoint(); 
     } 
     else if (e.OldValue > e.NewValue) 
     { 
      await this.mainWindow.RemovePoint(); 
     } 

     this.mainWindow.UpdateGUI(e.NewValue); 
    } 

、すべてではないValueChangesがピックアップされている次のようにイベント処理です。たとえば、私の矢印キーで100%スライダを制御する場合、次のようになります。 enter image description here

しかし、100%標準速度にスライドすると、値が移動すると思うので、値の一部が読み込まれます各値渡しのイベントを速く発射する: enter image description here

私の質問は、スライダーのイベントをより滑らかに処理して、動きの速さに関係なくすべての値を読み込む方法ですリアルタイムでグラフを更新しますか?

アイデアや助けをいただければ幸いです。

+0

全体ではなく、新しい質問を投稿し、それを改善するために、[以前、同じ質問](https://stackoverflow.com/a/44581811)を編集した方が良いされていると思います。いずれにしても、あなたは本当に実際の[mcve]を作るために何らかの努力をしていたはずです。あなたの質問は広すぎます。基本的な答えは同じです:あなたが観察する値の間を補間する必要があります。しかし、それを行う方法には多くの可能な答えがあります。 –

+0

@PeterDuniho私は何をしたいのですか?私は最小かつ完全な例を提供しましたか?私は関連するコードだけを含んでいました。私は、無関係のコードをたくさん用意する必要がある「実用的な」例を作成しました。私の意見では、最低限のコードを持つよりも問題が悪化します。私も多くの時間を持っていない、私はこれで十分だろうと思った、私は自分自身を可能な限り明確にしようとした、他に何ができますか? –

+0

最小値が0に設定され、最大値が100に設定されている、または何が問題なのかで、トラックの始めから最後まで親指をドラッグすると、正確に100のイベントが得られると思われますか? – mm8

答えて

1

私の質問は、私は、私は全体にスライドさせ、それはまだリアルタイムでグラフを更新して移動するどのくらいの速に関係なく、すべての値をロードしないことを可能にする方法で、より良い私のスライダのイベント扱うことができる方法ですか?

イベントハンドラで新しい値と古い値の差を計算し、異なる点ごとにメソッドを1回呼び出すことができます。このような何か:

public async void ProgressSliderEvent(object sender, System.Windows.RoutedPropertyChangedEventArgs<double> e) 
{ 
    if (e.NewValue > e.OldValue) 
    { 
     double diff = e.NewValue - e.OldValue; 
     for (double d = 0; d < diff; ++d) 
     { 
      await this.mainWindow.DisplayNewPoint(); 
     } 
    } 
    else if (e.OldValue > e.NewValue) 
    { 
     double diff = e.OldValue - e.NewValue; 
     for (double d = 0; d < diff; ++d) 
     { 
      await this.mainWindow.DisplayNewPoint(); 
     } 
    } 

    this.mainWindow.UpdateGUI(e.NewValue); 
} 
+0

これは良いアイデアです、これは '流れているのかどうかわかりません。ループに小さな睡眠を入れます。 –

+1

少しの作業の後で、これはうまくいくようです。ありがとうございました。 –

関連する問題