繁体   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