Перепривязка Datacontext для обновления графика оксиплота - PullRequest
0 голосов
/ 01 июня 2019

Я хочу иметь возможность обновить график, созданный Oxyplot, но я изо всех сил пытаюсь это сделать.

Теоретически this.model.InvalidatePlot (true);следует обновить его, но он не хочет.

MainPage.xaml.cs

using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;

namespace WeatherStation
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            this.BuildModel2();
            this.BuildModel();
        }

        public void BuildModel()
        {
            this.model = new PlotModel();

            LineSeries lineserie = new LineSeries();
            lineserie.Points.Add(new DataPoint(0, 0));
            lineserie.Points.Add(new DataPoint(1, 70));
            lineserie.Points.Add(new DataPoint(2, 20));
            lineserie.Points.Add(new DataPoint(3, 20));

            this.model.Series.Add(lineserie);
            this.model.InvalidatePlot(true);
            DataContext = this;
        }

        public void BuildModel2()
        {
            this.model = new PlotModel();

            LineSeries lineserie = new LineSeries();
            lineserie.Points.Add(new DataPoint(0, 0));
            lineserie.Points.Add(new DataPoint(1, 10));
            lineserie.Points.Add(new DataPoint(2, 80));
            lineserie.Points.Add(new DataPoint(3, 20));

            this.model.Series.Add(lineserie);
            this.model.InvalidatePlot(true);
            DataContext = this;
        }
        public PlotModel model { get; set; }
    }
}

MainPage.xaml

<Page
    x:Class="WeatherStation.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WeatherStation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:oxy="using:OxyPlot.Windows"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <oxy:PlotView Model="{Binding model, Mode=OneWay}"/>
    </Grid>
</Page>

Общая идея этого кода заключается в том, что один граф рисуется, а затем следующий должен его перезаписать.Если это произойдет, я знаю, что смогу обновить его, запустив подобные функции в будущем.

1 Ответ

1 голос
/ 02 июня 2019

Я исправил это.Я был слишком туп, чтобы увидеть решение.

Прежде всего нам нужно это

public LineSeries lineserie { get; set; }

Мы добавляем это к обеим моделям сборки:

    public void BuildModel()
    {
        this.model = new PlotModel();

        this.lineserie = new LineSeries();
        this.lineserie.Points.Add(new DataPoint(0, 0));
        this.lineserie.Points.Add(new DataPoint(1, 70));
        this.lineserie.Points.Add(new DataPoint(2, 20));
        this.lineserie.Points.Add(new DataPoint(3, 20));

        this.model.Series.Add(lineserie);
        this.DataContext = this;
    }

Затем мы удаляемстарую серию и добавляем новую, а потом обновляем:)

    public void BuildModel2()
    {
        this.model.Series.Remove(this.lineserie);

        this.lineserie = new LineSeries();
        this.lineserie.Points.Add(new DataPoint(0, 0));
        this.lineserie.Points.Add(new DataPoint(1, 10));
        this.lineserie.Points.Add(new DataPoint(2, 80));
        this.lineserie.Points.Add(new DataPoint(3, 20));
        this.model.Series.Add(lineserie);
        this.model.InvalidatePlot(true);
    }

И нам пора.Он в основном работает с одним и тем же объектом все время при обновлении указанного объекта, без создания нового.

...