обновить график отображения динамических данных WPF D3 - PullRequest
0 голосов
/ 04 января 2012

Я связываю LineGraph с источником данных, когда из бэкэнда приходят новые точки, проблема в том, что сетка не обновлена, вы можете сделать plotter.FitToView (), чтобы обновить ее, но это также соответствует новому графику для плоттера. Это очень раздражает, если вы увеличили масштаб и переместились в определенную точку на графике, потому что он уменьшится, чтобы уместить график на графике ... Итак, есть ли способ обновить его после привязки данных (вы думаете, что база данных обновит его + ..

Я также могу рассмотреть возможность изменения диаграммы WPF: у меня есть одно требование, и вы можете определять перетаскиваемые точки на графике

Ответы [ 3 ]

1 голос
/ 12 ноября 2012

Лучший способ, который я нашел для этого, - это иметь в своем коде свойство, представляющее источник данных, и привязывать источник данных диаграммы к этому свойству.Сделайте так, чтобы ваш код реализовывал 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));
} 
0 голосов
/ 01 мая 2013

Вы пытались переназначить сбор данных при добавлении новых данных?Я заметил, что это было необходимо для обновления моего графика.Например, после добавления новых объектов в мою коллекцию я бы использовал это:

DataCollection = new ObservableCollection<DataObject>(DataCollection);

Это начало работать, и я подумал, что это потому, что диаграмма реагировала только на OnPropertyChanged, а не OnCollectionChanged, или что-то подобное.эффект.Строка до боли бессмысленна и замедляет отображение больших объемов данных.

Редактировать: Это включает в себя ответ Джейсона выше, чтобы уведомить об изменениях!

0 голосов
/ 04 января 2012

Интерфейс для диаграммы WPF D3 полностью программный, т. Е. Вы должны «подталкивать» обновления, а не использовать привязку для автоматического обновления пользовательского интерфейса.В качестве альтернативы, возможно, рассмотрите диаграмму Visiblox, здесь есть пост в блоге, в котором описывается, как сделать точки данных перетаскиваемыми по мере необходимости:

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

Раскрытие информации: Я работаюдля компании, которая создала графики Visiblox.

...