簡體   English   中英

根據需要更新Oxyplot C#WPF

[英]Update Oxyplot C# WPF on demand

我正在試驗機械臂和模糊邏輯。 我的目標是繪制用戶創建的隸屬函數(簡單的三角形和梯形函數) oxy Plot'object'位於擴展器上,該擴展器位於MainWindow上。 地圖選擇很可能是從下拉菜單或文本框中選擇的。

不幸的是,我無法弄清楚如何使用新信息來更新繪圖。 基於時間,所有示例似乎都是動態的。 但是我需要它基於用戶需求! 我認為最接近的示例是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}"/>

問題出在我想用新標題之類的簡單內容更新劇情時。 據我所知,僅當對象位於MainWindow構造函數中時,才能更新OxyPlot。 例如,在創建原始圖后( 在MainWindow(){}之外),將調用以下代碼段:

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

沒用 原始圖保留下來,標題為“ Mag1”。 我有一種感覺,我想念與上下文有關的東西,特別是DataContext,但是我對語言不是很自在,所以被卡住了! 話雖這么說,我並沒有在Oxyplot上被完全賣掉。 如果有更好的方法,我願意嘗試一下。 謝謝閱讀。

PlotModel中使用PlotModel的想法是使用MVVM,因此您不應該真正使用Codebehind來完成您想做的事情。 您應該先檢查對WPF非常重要的MVVM概念,然后再看不同的MVVM框架來幫助您,例如Caliburn MicroMVVM Light

代碼的問題是,當您執行this.plotModel = CreatePlot("Mag2") ,您正在創建一個新的PlotModel對象,WPF會失去他與舊對象的綁定。 您應該通知他(實現INotifyPropertyChange )PlotModel屬性已更改。

但是無論如何,要更改標題,您不應該重新創建整個PlotModel,只需執行類似this.PlotModel.Title = "Mag2"

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

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM