Я пытаюсь написать приложение WPF для построения линейных диаграмм для серий чисел, которые у меня есть. Эти числа перечислены в файле .CSV
, который я прочитаю во время выполнения. Таким образом, я не знаю ни количества серий, которые я буду иметь, ни значений max / min каждой.
Чтобы продемонстрировать и для краткости, взгляните на следующий пример. Думайте об этих значениях ряда как о том, что я прочитаю из моего .CSV
файла в моем реальном приложении.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
SeriesCollection = new SeriesCollection
{
new LineSeries
{
Title = "Series 1",
Values = new ChartValues<double> { 4, 66, 5, 2, 4 },
},
new LineSeries
{
Title = "Series 2",
Values = new ChartValues<double> { 6, 7, 3, 4, 6 },
},
new LineSeries
{
Title = "Series 3",
Values = new ChartValues<double> { 4, 2, 7, 2, 7 },
}
};
DataContext = this;
}
public SeriesCollection SeriesCollection { get; set; }
}
Мой XAML
выглядит очень просто, вот так:
<Window x:Class="WPFCharts.MainWindow"
...
Title="MainWindow" Height="450" Width="800">
<Grid>
<lvc:CartesianChart Series="{Binding SeriesCollection}"/>
</Grid>
</Window>
Как вы можете видеть, одно из значений в одной серии находится вне графиков по сравнению с остальными, если бы я построил это на линейном графике с настройками по умолчанию LiveCharts
:
Поэтому я хочу дать пользователю возможность размещать такие линейные графики на своей оси. Читая LiveCharts
документацию, я обнаружил, , как показано здесь , что вы можете поместить различные серии линий в разные оси, используя свойства ScaleXAt
и ScaleYAt
.
Однако этот пример устанавливает ось в XAML
, тогда как я хочу сделать это динамически. Поэтому я попытался установить указанное свойство в коде так:
SeriesCollection = new SeriesCollection
{
new LineSeries
{
Title = "Series 1",
Values = new ChartValues<double> { 4, 66, 5, 2, 4 },
ScalesYAt = 0
},
new LineSeries
{
Title = "Series 2",
Values = new ChartValues<double> { 6, 7, 3, 4, 6 },
ScalesYAt = 1
},
new LineSeries
{
Title = "Series 3",
Values = new ChartValues<double> { 4, 2, 7, 2, 7 },
ScalesYAt = 2
}
};
Но когда я делаю это и запускаю приложение, я получаю исключение:
System.ArgumentOutOfRangeException: 'Индекс был вне диапазона. Должен быть неотрицательным и меньше размера коллекции. '
Что я здесь не так делаю? Как я могу установить это, используя код, а не XAML
?