动态创建的图表中的C#WPF LiveChart Update数据系列

时间:2018-08-14 08:01:33

标签: c# wpf livecharts

任何人都可以就以下如何创建图表和系列的动态代码(每个图表3-5个系列)的代码来更新所有动态创建的图表(10-12个图表)的建议: 汇总了所有图表和页面的页面部分:

        public ChartPage()
    {
        InitializeComponent();
        for(int i = 0; i < ChartConnector.FoundMainData; i++)
        {
            GroupedCharts SC = new GroupedCharts();
            foreach (string SGDO in ChartConnector.MainDataTable[i].SecondLevelData.Keys)
            {


                SingleChartObject SingleChart = new SingleChartObject ();

                for (int z = 0; z < ChartConnector.MainDataTable[i].SecondLevelData[SGDO].FoundThirdLevelData; z++)
                {
                    SingleChart.AddNewLineToChart(ChartConnector.MainDataTable[i].SecondLevelData[SGDO].ThirdLevelData[z].ThirdLevelDataName, Convert.ToDouble(ChartConnector.MainDataTable[i].SecondLevelData[SGDO].ThirdLevelData[z].ThirdLevelDataValue));
                }
                SC.AddChartToGroup(SingleChart);
            }
            ChartList.Children.Add(SC);
        }
    }

ChartPage xaml中的图表列表

<StackPanel x:Name="ChartList"></StackPanel>

GroupedCharts是UserControl,用于存储第二级数据中的图表 下面的GroupedCharts AddChartToGroup函数:

public void AddChartToGroup(SensorChart ChartBlock)
    {
         ChartGroup.Children.Add(ChartBlock);
    }

下面的xaml代码中的图表组:

<WrapPanel Orientation="Horizontal" x:Name="ChartGroup"></WrapPanel>

SingleChartObject也是具有LiveChart并在其中添加系列的Usercontrol,下面是AddNewLineToChart函数代码:

 public void AddNewLineToChart(string Name, double Value)
    {
        ChartValues<LiveCharts.Defaults.ObservableValue> observableValues = new ChartValues<LiveCharts.Defaults.ObservableValue>
        {
            new LiveCharts.Defaults.ObservableValue(Value)
        };
        LiveCharts.Wpf.LineSeries FreshLines = new LineSeries
        {
            Values = observableValues,
            Title = Name

        };
        ChartBlock.Series.Add(FreshLines);
    }

在SingleChartObject中自我标绘

<lvc:CartesianChart x:Name="ChartBlock" Height="125" Width="300" Pan="None" >
            <lvc:CartesianChart.DataTooltip>
                <lvc:DefaultTooltip SelectionMode="SharedYInSeries" />
            </lvc:CartesianChart.DataTooltip>
        </lvc:CartesianChart>

现在主要的问题是如何同时更新所有图表,我不知道如何进行如此大量的更新。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您应在应用程序中使用MVVM模式。与其使用“ ChartList”作为StackPanel,不如使用“ ItemsControl”并将其ItemTemplate设置为“ GroupedCharts”。还要为此“ GroupedChart”用户控件创建一个视图模型。使用此视图模型的集合设置项目源。您必须进行一级嵌套才能实现所需的功能。 一旦您的视图由视图模型控制,它将自动更新您的视图。但是为此,您必须正确实现MVVM模式。