2012-01-04 45 views
0

当新点来自后端时,我使用数据源绑定LineGraph,问题是网格未刷新,您可以执行plotter.FitToView()以使其刷新,但也是如此将新图形拟合到绘图仪窗口,如果您已放大并平移到图表上的特定点,因为它会放大以适合图表上的图形,那么这是非常令人反感的。那么,有没有办法刷新它数据绑定后(你认为一个数据绑定将刷新+ ..刷新WPF D3动态数据显示图表

我也可以考虑改变WPF图表enterily我有一个要求,它可以在图表

回答

0

到WPF的接口上定义了可拖动点D3图表完全是程序化的,即您必须“推送”更新,而不是使用绑定来自动刷新UI。作为替代,或许考虑Visiblox图,有一个博客张贴在这里介绍如何使数据点拖动,你需要:

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

披露:我为创建Visiblox图表公司工作。

+0

它为一个开源项目,不能使用付费产品:/ – Anders 2012-01-05 00:05:58

+0

我决定给Visiblox一个机会,因为它的数据库非常多。我看了一下这个例子并复制了MovePointBehaviour代码...它工作正常。但是我需要捕捉点的变化,以便我的业务逻辑可以对此做出反应,最好的办法是什么? – Anders 2012-01-05 13:59:37

1

我发现要做到这一点的最好方法是在代码后面有一个代表DataSource并将图表的DataSource绑定到该属性的Property。每次更新或重新分配数据源时,让您的代码实现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

是的,我是如何做到的,但我使用Caliburn.Micro。什么也没有发生,你需要使用FitToView()来刷新点 – Anders 2012-11-19 14:20:26

0

您是否尝试过重新分配数据收集,当你添加新的数据?我注意到这是更新我的图表所必需的。例如,添加新对象到我的收藏后,我会使用这样的:

DataCollection = new ObservableCollection<DataObject>(DataCollection); 

这开始工作,而且我认为这是因为该图仅回应OnPropertyChanged而不是OnCollectionChanged,或诸如此类的话。尽管如此,这条线很痛苦,毫无意义,并且会减慢大量数据的显示速度。

编辑:这是包括杰森的回答上面通知的变化!