当新点来自后端时,我将LineGraph与数据源绑定在一起,问题是网格没有刷新,您可以使用绘图仪. fittoview()来刷新它,但这也适合绘图仪窗口的新图形,如果您放大并平移到图表上的特定点,这是非常令人兴奋的,因为它会缩小以适应图表上的图形。那么,有没有办法在数据绑定后刷新它(你认为数据绑定会刷新它+..
我也可以考虑完全改变WPF图表,我有一个要求,那就是你可以在图表上定义可拖动点
我发现这样做的最好方法是在你的代码后面有一个属性,代表数据源,并将图表的数据源绑定到该属性。让你的代码背后实现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));
}
WPF D3图表的接口完全是程序化的,也就是说,你必须"推送"更新,而不是使用绑定来自动刷新UI。作为一种选择,也许可以考虑Visiblox图表,这里有一篇博客文章描述了如何根据需要使数据点可拖动:
http://www.visiblox.com/blog/2011/11/creating-a-custom-behaviour-part-3-the-finale披露:我在创建Visiblox图表的公司工作。
您是否尝试在添加新数据时重新分配数据集合?我注意到有必要更新我的图表。例如,在向集合中添加新对象后,我将使用如下命令:
DataCollection = new ObservableCollection<DataObject>(DataCollection);
这开始工作,我认为这是因为图表只响应OnPropertyChanged,而不是OnCollectionChanged,或类似的东西。但是,这一行毫无意义,而且在显示大量数据时减慢了显示速度。
编辑:这包括上面Jason的回答来通知更改!