Борьба с OxyPlot

Изучаю C# и WPF уже около 5 или 6 недель и работаю стажером над проектом. Не плохо, но сейчас я застрял, и я не могу понять, почему. Попытка перенести приложение WinForms на WPF. В старом приложении использовались Z-графики, написан код для OxyPlot, но мои графики не отображаются, и я понятия не имею, почему.

XAML

<Border BorderBrush="{StaticResource chromeBrush}" BorderThickness="5 5 5 5" Margin="2 3 0 2" Grid.Column="3" Grid.ColumnSpan="36" Grid.Row="3" Grid.RowSpan="33" Background="Black"> <DockPanel> <DockPanel.DataContext> <local:Main/> </DockPanel.DataContext> <oxy:Plot Model="{Binding openPlot}" /> </DockPanel> </Border>

И С#

public partial class Main : Window
{

    public Dictionary<string, DoorData> doorList;

    public Main()
    {
        //this.InitializeComponent();
        doorList = new Dictionary<string, DoorData>();

    }

    public DoorData doorGraphs = new DoorData();

    private void unitList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string selectedUnit = unitList.SelectedItem.ToString();
        doorGraphs = doorList[selectedUnit];

        this.Title = selectedUnit + " Open";
        PlotModel openPlot = new PlotModel();

        List<SmartDDUOperation> values = doorGraphs.Data;
        doorGraphs.FilterToType(SmartOperationType.Open);
        IEnumerable<SmartDDUOperation> drawOrder = values.OrderByDescending(x => x.TimeStamp);

        List<LineSeries> linePointsArray = new List<LineSeries>();
        foreach (SmartDDUOperation doorOp in drawOrder)
        {
            List<Tuple<double, double>> points = new List<Tuple<double, double>>();
            points = doorOp.GetTimePoints2();
            LineSeries linePoints = new LineSeries();

            foreach (Tuple<double, double> p in points)
            {
                DataPoint XYPoint = new DataPoint(p.Item1, p.Item2);
                linePoints.Points.Add(XYPoint);
            }

            linePointsArray.Add(linePoints);
        }

        LinearAxis Xaxis = new LinearAxis();
        Xaxis.Maximum = 6;
        Xaxis.Minimum = 0;
        Xaxis.Position = AxisPosition.Bottom;
        Xaxis.Title = "Time (s)";
        openPlot.Axes.Add(Xaxis);

        LinearAxis Yaxis = new LinearAxis();
        Yaxis.Maximum = 12;
        Yaxis.Minimum = 1;
        Yaxis.Position = AxisPosition.Left;
        Yaxis.Title = "Door Position";
        openPlot.Axes.Add(Yaxis);

        // Adds each series to the graph

        foreach (var series in linePointsArray)
        {
            openPlot.Series.Add(series);
        }



    }

Использование следующих пространств имен...

enter using OxyPlot; using OxyPlot.Annotations; using OxyPlot.Series; using OxyPlot.Axes;

Как я уже сказал, только новичок, поэтому, вероятно, там есть очевидные ошибки. Не стесняйтесь указать на них и просветить меня.

Спасибо


person Reaver    schedule 14.09.2014    source источник


Ответы (2)


Вы объявляете свою PlotModel внутри метода... Она выйдет за рамки, когда вы покинете функцию. Так что вы ни к чему не привязываетесь. Ваша PlotModel должна быть общедоступной и объявленной в вашем ViewModel/Main.

person CodyF    schedule 20.02.2015

Я новичок в OxyPlot. Из того, что я знаю, вам может понадобиться включить использование

using OxyPlot.WPF;

декларация.

Также призыв к

openPlot InvalidatePlot(true);

может потребоваться для запуска перерисовки.

Возможно, вам потребуется добавить

openPlot.Series.Clear();

Прежде чем вы добавите свою серию, возможно, вы снова добавите эту серию.

person user2069105    schedule 30.09.2014