2013-12-13 104 views
0

我正在試驗機器人手臂和模糊邏輯。我的目標是繪製由用戶創建的隸屬函數(簡單的三角形和梯形函數)。氧氣圖「對象」位於位於MainWindow上的擴展器上。繪圖選擇很可能來自下拉或文本框。按需更新Oxyplot C#WPF

不幸的是,我無法弄清楚如何用新的信息更新一個陰謀。所有的例子似乎都是基於時間的動態的。但我需要它根據用戶需求!我能找到的最接近的例子是RefreshTask演示文件,我認爲

到現在爲止我已經能夠生產出標題的原始的,空白的情節和軸使用的語法如下:

public partial class MainWindow : Window 
{ 

    private PlotModel plotModel; 

    public PlotModel PlotModel 
    { 
     get 
     { 
      return this.plotModel; 
     } 
     set 
     { 
      this.plotModel = value; 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     this.PlotModel = CreatePlot("mag1"); 
    } 


    private PlotModel CreatePlot(string title) 
    { 
     var pm = new PlotModel(title); 

     return pm; 
    } 

而XAML

<Window x:Class="FuzzyGripper.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:oxy="clr-namespace:OxyPlot.Wpf;assembly=OxyPlot.Wpf" 
    Title="MainWindow" Height="800" Width="1000" Closing="Window_Closing" Loaded="Window_Loaded"> 

...... A ton of stuff ...... then...... 

<oxy:Plot x:Name="plot1" Model="{Binding PlotModel}"/> 

問題是當我想用新標題那樣簡單的方式來更新劇情。從我可以告訴OxyPlot只能在對象位於MainWindow構造函數中時更新。例如創建原作情節後,下面的代碼片段被稱爲(外主窗​​口的(){}):

this.plotModel = CreatePlot("Mag2"); 
plot1.RefreshPlot(true); 

它不工作。原始的情節依然存在,標題爲「Mag1」。我有一種感覺,我錯過了與上下文相關的東西,特別是 - DataContext - 但我對這種語言並不是很滿意,所以我被卡住了!據說,我並不完全在Oxyplot上銷售。如果有更好的方法,我願意試一試。謝謝閱讀。

回答

4

在OxyPlot中使用PlotModel背後的想法是使用MVVM,所以你不應該使用Codebehind來做你想做的事情。你應該先檢查concept of MVVM這是WPF非常重要的,然後看看不同MVVM框架,幫助你用它,就像Caliburn MicroMVVM Light

與您的代碼的問題是,當你做this.plotModel = CreatePlot("Mag2"),你創建一個新的PlotModel對象,然後WPF失去了他與舊對象的綁定。您應該通知他(實施INotifyPropertyChange)PlotModel屬性已更改。

但無論如何,要改變標題,你不應該重新創建一個完整的PlotModel,你應該只是做一些像this.PlotModel.Title = "Mag2"

另外,PlotModel本身有一個刷新方法,最好調用這個方法而不是調用Plot的刷新。

祝你好運。