private void InitializeCharts()
        {
            ChartsStackPanel.Children.Clear();

            foreach (var channelName in activeChannelNames)
            {
                var chart = new Chart(channelName);
                chart.AddChannelName(channelName);
                charts.Add(chart);
                ChartsStackPanel.Children.Add(chart);
            }

            foreach (var group in activeGroups)
            {
                var chart = new Chart(group.Name);
                foreach (var attribute in group.Attributes)
                {
                    chart.AddChannelName(attribute.Name);
                }
                charts.Add(chart);
                ChartsStackPanel.Children.Add(chart);
            }
        }
        /// <summary>
        /// Builds one <see cref="Chart"/> with the <paramref name="group"/>s values.
        /// </summary>
        /// <param name="group"><see cref="Group"/> that will shown on the <see cref="Chart"/></param>
        /// <returns>A <see cref="Chart"/> with the <paramref name="group"/>s values.</returns>
        private Chart BuildGroupChart(Group group)
        {
            var chart = new Chart(group.Name);

            int dataIndex = (int)DataSlider.Value;

            var addedChannelNames = new List <string>();

            foreach (var channelName in ChannelNames)
            {
                var attribute = group.GetAttribute(channelName.Item1);
                if (attribute != null)
                {
                    foreach (var inputFile in channelName.Item2)
                    {
                        int lineWidth = group.GetAttribute(channelName.Item1).LineWidth;
                        var channel   = GetChannel(inputFile.Item1, channelName.Item1);

                        if (inputFile.Item2) // aktiv e a channel
                        {
                            var actHorizontalAxisData = GetChannel(inputFile.Item1, group.HorizontalAxis).Data;
                            if (actHorizontalAxisData == null)
                            {
                                ShowError.ShowErrorMessage($"Can't find '{group.HorizontalAxis}', so can't show diagram properly");
                            }

                            if (actHorizontalAxisData.Count > horizontalAxisData.Count)
                            {
                                horizontalAxisData = new List <double>(actHorizontalAxisData);
                            }

                            var channelDataPlotData = ConvertChannelDataToPlotData(channel.Data.ToArray(), actHorizontalAxisData);

                            var color = group.GetAttribute(channel.Name).Color;

                            chart.AddPlot(xAxisValues: channelDataPlotData.Item1,
                                          yAxisValues: channelDataPlotData.Item2,
                                          lineWidth: lineWidth,
                                          lineColor: ColorTranslator.FromHtml(color),
                                          xAxisLabel: group.HorizontalAxis);

                            chart.AddSideValue(channelName: channelName.Item1,
                                               xAxisValues: channelDataPlotData.Item2,
                                               isActive: true,
                                               inputFileID: inputFile.Item1,
                                               color: color,
                                               lineWidth: lineWidth);
                        }
                        else
                        {
                            chart.AddSideValue(channelName: channelName.Item1, xAxisValues: new double[0], inputFileID: inputFile.Item1);
                        }

                        chart.AddChannelName(channelName.Item1);

                        addedChannelNames.Add(channelName.Item1);
                    }
                }
            }

            foreach (var attribute in group.Attributes)
            {
                if (!addedChannelNames.Contains(attribute.Name))
                {
                    chart.AddChannelName(attribute.Name);
                    chart.AddSideValue(channelName: attribute.Name, xAxisValues: new double[0]);
                }
            }

            if (horizontalAxisData.Count > 0)
            {
                double xValue = dataIndex < horizontalAxisData.Count ? horizontalAxisData[dataIndex] : horizontalAxisData.Last();
                chart.UpdateHighlight(xValue);
            }

            chart.SetAxisLimitsToAuto();

            return(chart);
        }