2012-01-04 43 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,或諸如此類的話。儘管如此,這條線很痛苦,毫無意義,並且會減慢大量數據的顯示速度。

編輯:這是包括傑森的回答上面通知的變化!