0

新しいポイントがバックエンドから来たときにLineGraphをデータソースにデータバインドします。問題は、グリッドが更新されないことです。plotter.FitToView()を実行して更新することができますが、これは新しいグラフをプロッターウィンドウに適合させます。グラフの特定のポイントにズームインしてパンした場合、グラフのグラフに合わせてズームアウトするため、非常にイライラします...したがって、データバインド後に更新する方法はありますか(データバインドは更新されると思います) it + ..

また、WPFチャートを簡単に変更することも検討できます。1つの要件があり、チャート上でドラッグ可能なポイントを定義できるという要件があります。

4

3 に答える 3

1

これを行うために私が見つけた最良の方法は、コード ビハインドに DataSource を表すプロパティを設定し、チャートの DataSource をそのプロパティにバインドすることです。コード ビハインドで INotifyPropertyChanged を実装し、データ ソースを更新または再割り当てするたびに OnPropertyChanged を呼び出します。これにより、プロッターはバインドを監視し、グラフを再描画するように強制されます。

例:

EnumerableDataSource<Point> m_d3DataSource;
public EnumerableDataSource<Point> D3DataSource {
get {
    return m_d3DataSource;
}
set {                
    //you can set your mapping inside the set block as well             
    m_d3DataSource = value;
    OnPropertyChanged("D3DataSource");
}
}     

protected void OnPropertyChanged(PropertyChangedEventArgs e) {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null) {
        handler(this, e);
    }
} 

protected void OnPropertyChanged(string propertyName) {
    OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
} 
于 2012-11-12T16:39:47.697 に答える
0

WPF D3 チャートへのインターフェイスは完全にプログラムです。つまり、バインディングを使用して UI を自動的に更新するのではなく、更新を「プッシュ」する必要があります。別の方法として、おそらく Visiblox チャートを検討してください。必要に応じてデータポイントをドラッグ可能にする方法を説明するブログ投稿がここにあります。

http://www.visiblox.com/blog/2011/11/creating-a-custom-behaviour-part-3-the-finale

開示:私は Visiblox チャートを作成した会社で働いています。

于 2012-01-04T17:03:58.610 に答える
0

新しいデータを追加するときに、データ コレクションを再割り当てしようとしましたか? これは、グラフを更新するために必要であることに気付きました。たとえば、コレクションに新しいオブジェクトを追加した後、これを使用します。

DataCollection = new ObservableCollection<DataObject>(DataCollection);

これは機能し始めました。これは、グラフが OnPropertyChanged にのみ応答し、OnCollectionChanged に応答しなかったか、またはその効果に応答したためだと思いました。ただし、この行は非常に無意味であり、大量のデータの表示が遅くなります。

編集:これには、変更を通知するための上記のジェイソンの回答が含まれています!

于 2013-04-30T21:48:57.130 に答える