如何在WPF C#中动态创建堆栈列实时图表?

时间:2020-07-22 06:41:43

标签: c# asp.net wpf livecharts material-design-in-xaml

我已经在创建堆叠式柱形图的地方编写了代码。在这里,我计算每个月的值。重复了相同的代码,这很麻烦。我发现这里很难处理我的代码。

int i = 0;

        double fstLeaveHrs = 0;
        double fstRmngHrs = 0;
        double fstPlannedHrs = 0;
        double fstAcquisitionHrs = 0;

        double sndLeaveHrs = 0;
        double sndRmngHrs = 0;
        double sndPlannedHrs = 0;
        double sndAcquisitionHrs = 0;

        double thdLeaveHrs = 0;
        double thdRmngHrs = 0;
        double thdPlannedHrs = 0;
        double thdAcquisitionHrs = 0;


        double dblLeaveHrs = GrossWorkingHrs - NetWorkingHrs;
        double dblRmngHrs = GrossWorkingHrs - PlannedHrsForPeriod - dblLeaveHrs;

        if (dblRmngHrs < 0)
            dblRmngHrs = 0;

        while (i <= MonthRange)
        {
            if (i == 0)
            {
                CalculateHrsForSelectedMonth(SelectedMonthFrom);
                fstAcquisitionHrs = CalculateAquisitionHrsForSelectedMonth(SelectedMonthFrom);
                fstPlannedHrs = PlannedWorkingHrsInMonth;
                fstLeaveHrs = GrossWorkingHrsInMonth - NetWorkingHrsInMonth;
                fstRmngHrs = GrossWorkingHrsInMonth - fstPlannedHrs - fstLeaveHrs;

                if (fstRmngHrs < 0)
                    fstRmngHrs = 0;

            }
            else if (i == 1)
            {
                CalculateHrsForSelectedMonth(SecondMonth);
                sndAcquisitionHrs = CalculateAquisitionHrsForSelectedMonth(SecondMonth);
                sndPlannedHrs = PlannedWorkingHrsInMonth;
                sndLeaveHrs = GrossWorkingHrsInMonth - NetWorkingHrsInMonth;
                sndRmngHrs = GrossWorkingHrsInMonth - sndPlannedHrs - sndLeaveHrs;

                if (sndRmngHrs < 0)
                    sndRmngHrs = 0;
            }
            else if (i == 2)
            {
                CalculateHrsForSelectedMonth(ThirdMonth);
                thdAcquisitionHrs = CalculateAquisitionHrsForSelectedMonth(ThirdMonth);
                thdPlannedHrs = PlannedWorkingHrsInMonth;
                thdLeaveHrs = GrossWorkingHrsInMonth - NetWorkingHrsInMonth;
                thdRmngHrs = GrossWorkingHrsInMonth - thdPlannedHrs - thdLeaveHrs;

                if (thdRmngHrs < 0)
                    thdRmngHrs = 0;
            }
            i++;
        }

        SeriesCollection = new SeriesCollection
        {
            new StackedColumnSeries
            {
                Values = new ChartValues<double> { PlannedHrsForPeriod, fstPlannedHrs, sndPlannedHrs,thdPlannedHrs},
                DataLabels = true
            },
            new StackedColumnSeries
            {
                Values = new ChartValues<double> {fstAcquisitionHrs+sndAcquisitionHrs+thdAcquisitionHrs,fstAcquisitionHrs,sndAcquisitionHrs,thdAcquisitionHrs },
                DataLabels = true
            },
            new StackedColumnSeries
            {
                Values = new ChartValues<double> { dblLeaveHrs,fstLeaveHrs,sndLeaveHrs,thdLeaveHrs },
                //StackMode = StackMode.Values
                 DataLabels = true
            },
            new StackedColumnSeries
            {
                Values = new ChartValues<double> { dblRmngHrs, fstRmngHrs,sndRmngHrs,thdRmngHrs },
                //StackMode = StackMode.Values,
                 DataLabels = true
            }
        };

        //adding values also updates and animates

        if (MonthRange == 0)
        {
            SecondMonth = null;
            ThirdMonth = null;
        }
        else if (MonthRange == 1)
        {
            ThirdMonth = null;
        }

        Labels = new[] { "Period", SelectedMonthFrom, SecondMonth, ThirdMonth };
        Formatter = value => value + " hrs";
        GrossWorkingHrsInMonth = NetWorkingHrsInMonth = PlannedWorkingHrsInMonth = 0;

    }

实际上,我需要整整一年。这是我的XAML代码

<lvc:CartesianChart Series="{Binding SeriesCollection}" LegendLocation="None">
                        <lvc:CartesianChart.AxisX>
                            <lvc:Axis 
                      Labels="{Binding Labels}" 
                      Separator="{x:Static lvc:DefaultAxes.CleanSeparator}" />
                        </lvc:CartesianChart.AxisX>
                        <lvc:CartesianChart.AxisY>
                            <lvc:Axis Title="Usage" LabelFormatter="{Binding Formatter}"></lvc:Axis>
                        </lvc:CartesianChart.AxisY>
                    </lvc:CartesianChart>

我正在寻找易于理解和追溯的东西。

0 个答案:

没有答案