当新点来自后端时,我用一个数据源对LineGraph进行数据绑定,问题是网格没有刷新,你可以做一个plotter.FitToView()让它刷新,但这也适合绘图仪的新图形如果你放大并平移到图表上的某个特定点,这是非常令人厌恶的,因为它会动画出来以适应图表上的图形...所以,有没有办法在数据绑定后刷新它(你认为是数据绑定会刷新它.. ..
我还可以考虑更改WPF图表,我有一个要求,它可以在图表上定义可拖动点
答案 0 :(得分:1)
我发现这样做的最好方法是在代码后面有一个表示DataSource的Property,并将图表的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));
}
答案 1 :(得分:0)
WPF D3图表的界面完全是程序化的,即您必须“推送”更新而不是使用绑定来自动刷新UI。作为替代方案或许考虑Visiblox图表,这里有一篇博客文章描述了如何根据需要使数据点可拖动:
http://www.visiblox.com/blog/2011/11/creating-a-custom-behaviour-part-3-the-finale
披露:我为创建Visiblox图表的公司工作。
答案 2 :(得分:0)
您是否尝试在添加新数据时重新分配数据集?我注意到这是更新我的图表所必需的。例如,在我的集合中添加新对象后,我将使用它:
DataCollection = new ObservableCollection<DataObject>(DataCollection);
这开始工作了,我认为这是因为图表只响应OnPropertyChanged而不是OnCollectionChanged,或者是那种效果。尽管如此,这条线是毫无意义的,并且会减慢显示屏的大量数据。
编辑:这包括Jason上面的答案,以通知变更!