任何人都可以就以下如何创建图表和系列的动态代码(每个图表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>
现在主要的问题是如何同时更新所有图表,我不知道如何进行如此大量的更新。感谢您的帮助。
答案 0 :(得分:0)
您应在应用程序中使用MVVM模式。与其使用“ ChartList”作为StackPanel,不如使用“ ItemsControl”并将其ItemTemplate设置为“ GroupedCharts”。还要为此“ GroupedChart”用户控件创建一个视图模型。使用此视图模型的集合设置项目源。您必须进行一级嵌套才能实现所需的功能。 一旦您的视图由视图模型控制,它将自动更新您的视图。但是为此,您必须正确实现MVVM模式。