Начало работы с диаграммами — паттерн MVVM¶
Вы можете заполнять контролы диаграмм данными, используя паттерн проектирования MVVM. Это полезно, когда требуется отобразить несколько серий данных.
Этот учебник показывает, как отрисовать два линейных графика в контроле CartesianChart, используя паттерн MVVM. Данные для линейных графиков в этом примере вычисляются с помощью математических функций (синус и косинус).
Полный код этого учебника можно найти в модуле Cartesian Chart→Line демонстрационного приложения.
Определение View Model¶
Начните с определения View Model, предоставляющих данные и настройки серий для контрола диаграммы.
-
CartesianLineSeriesViewViewModel — главная View Model, которая будет назначена в качестве Data Context контрола диаграммы. Главная View Model предоставляет свойство CartesianLineSeriesViewViewModel.Series, которое задаёт коллекцию View Model серий данных.
-
SeriesViewModel — View Model для серии данных.
// The main View Model
public partial class CartesianLineSeriesViewViewModel : ChartsPageViewModel
{
static double Sin(double argument) => Math.Sin(argument);
static double Cos(double argument) => Math.Cos(argument);
const int ItemCount = 100;
const double Step = 4 * Math.PI / ItemCount;
// A collection of View Models used to create data series.
[ObservableProperty] ObservableCollection<SeriesViewModel> series = new()
{
new SeriesViewModel { Color = Color.FromArgb(255, 189, 20, 54), DataAdapter = new FormulaDataAdapter(0, Step, ItemCount, Sin)},
new SeriesViewModel { Color = Color.FromArgb(255, 0, 120, 122), DataAdapter = new FormulaDataAdapter(0, Step, ItemCount, Cos)},
};
}
// A View Model for a data series.
public partial class SeriesViewModel : ObservableObject
{
[ObservableProperty] string axisXKey;
[ObservableProperty] string axisYKey;
[ObservableProperty] Color color;
[ObservableProperty] ISeriesDataAdapter dataAdapter;
}
Коллекция CartesianLineSeriesViewViewModel.Series инициализируется двумя View Model серий. Cartesian Chart отрисует их как две серии данных.
View Model серии данных (SeriesViewModel) предоставляет свойства, задающие данные и цвет для отрисовки серии в контроле диаграммы:
- Color — цвет для отрисовки серии данных.
- DataAdapter — объект
ISeriesDataAdapter, предоставляющий данные для серии.
Eremex Charts поставляются с несколькими адаптерами данных для различных типов данных (числовых, дата-время и качественных). Все адаптеры данных реализуют интерфейс ISeriesDataAdapter.
В этом учебнике используется объект Eremex.AvaloniaUI.Charts.FormulaDataAdapter. Он задаёт функцию, возвращающую числовые значения Y с шагом Step.
Несколько примеров других адаптеров данных:
- SortedNumericDataAdapter — предоставляет пары (числовое значение X, числовое значение Y), отсортированные по значениям X.
- QualitativeDataAdapter — предоставляет пары (строковое значение X, числовое значение Y).
Подробнее см. в разделе Cartesian Chart.
Создание контрола диаграммы¶
В XAML создайте контрол CartesianChart и инициализируйте его свойства CartesianChart.SeriesSource и CartesianChart.SeriesTemplate:
CartesianChart.SeriesSource— коллекция View Model, представляющих серии данных (коллекция CartesianLineSeriesViewViewModel.Series, хранящая объекты SeriesViewModel).
Предполагается, что Data Context контрола диаграммы установлен в объект CartesianLineSeriesViewViewModel.
CartesianChart.SeriesTemplate— шаблон, создающий объектCartesianSeriesиз View Model серии. КлассCartesianSeriesинкапсулирует одну серию данных в контролеCartesianChart.
<mxc:CartesianChart Grid.Column="0" Classes="DemoChart"
SeriesSource="{Binding Series}" x:Name="chart1">
<mxc:CartesianChart.SeriesTemplate>
<DataTemplate x:DataType="vm:SeriesViewModel">
<mxc:CartesianSeries DataAdapter="{Binding DataAdapter}">
<mxc:CartesianLineSeriesView Color="{Binding Color}"
ShowMarkers="True"
MarkerSize="4"
Thickness="2"/>
</mxc:CartesianSeries>
</DataTemplate>
</mxc:CartesianChart.SeriesTemplate>
</mxc:CartesianChart>
При создании объекта CartesianSeries инициализируйте следующие свойства, чтобы задать данные и представление серии:
CartesianSeries.DataAdapter— адаптер данных, предоставляющий данные. Установите это свойство равным свойству DataAdapter, определённому в View Model.CartesianSeries.View— представление серии, определяющее визуальное отображение серии данных.
Настройка представления серии¶
Свойство CartesianSeries.View задаёт визуальное отображение серии данных. В XAML вы можете указать представление в качестве содержимого объекта CartesianSeries.
<mxc:CartesianSeries DataAdapter="{Binding DataAdapter}">
<mxc:CartesianLineSeriesView Color="{Binding Color}"
ShowMarkers="True"
MarkerSize="4"
Thickness="2"/>
</mxc:CartesianSeries>
В этом учебнике свойство CartesianSeries.View инициализируется объектом CartesianLineSeriesView, чтобы отобразить данные в виде линии, соединяющей исходные точки данных.
Чтобы представить данные другим образом в ваших проектах, используйте другие представления серий (классы-наследники SeriesViewBase). Несколько примеров доступных представлений серий показаны ниже:
Представление серии содержит настройки, позволяющие изменить стиль отображения серии.
<mxc:CartesianLineSeriesView Color="{Binding Color}"
ShowMarkers="True"
MarkerSize="4"
Thickness="2"/>
Например, класс CartesianLineSeriesView предоставляет следующие свойства:
Color— цвет для отрисовки серии.CrosshairMode— определяет, отображать ли интерполированное значение Y или значение Y ближайшей точки, когда активна функция Crosshair и включена опцияShowInCrosshair.MarkerSize— задаёт размер маркера точки.MarkerImage— позволяет указать пользовательское изображение для использования в качестве маркеров точек данных. Для назначения SVG-изображений используйте объекты классаSvgImage.MarkerImageCss— код CSS, позволяющий настроить цвета элементов указанного SVG-изображения (MarkerImage).ShowInCrosshair— определяет, отображать ли значение Y диаграммы в точке пересечения вертикальной линии Crosshair с графиком.ShowMarkers— включает или отключает маркеры точек.Thickness— задаёт толщину линии.
Создание осей диаграммы¶
Контрол CartesianChart автоматически создаёт декартовы оси (ось X и ось Y), если вы не определяете их вручную. Если вы хотите настроить оси в XAML, добавьте объекты AxisX и/или AxisY в коллекции CartesianChart.AxesX/CartesianChart.AxesY, а затем измените параметры осей.
<mxc:CartesianChart Grid.Column="0" Classes="DemoChart" SeriesSource="{Binding Series}" x:Name="chart1">
<!-- ... -->
<mxc:CartesianChart.AxesX>
<mxc:AxisX ShowTitle="True" />
</mxc:CartesianChart.AxesX>
<mxc:CartesianChart.AxesY>
<mxc:AxisY ShowTitle="False" />
</mxc:CartesianChart.AxesY>
</mxc:CartesianChart>
В следующем списке приведены основные настройки декартовых осей:
ConstantLinesиConstantLinesSource— позволяют отрисовать постоянные линии для конкретных значений. См. такжеStripsиStripsSource.EnableScrolling— позволяет пользователю прокручивать ось операцией перетаскивания мышью.EnableZooming— позволяет пользователю масштабировать ось.MinorCount— задаёт количество второстепенных отметок (tickmarks) и линий сетки.Position— задаёт положение оси. Доступные варианты:Near(ось X отображается снизу, ось Y — у левого края диаграммы) иFar(ось X отображается сверху, ось Y — у правого края диаграммы).Range— настройки диапазона значений.ScaleOptions— задаёт параметры масштаба.ShowAxisLine— задаёт видимость линии оси.ShowInterlacing— определяет, закрашивать ли чередующиеся полосы между основными линиями сетки.ShowLabels— задаёт видимость меток, соответствующих основным отметкам.ShowMajorGridlines— задаёт видимость линий сетки, соответствующих основным отметкам.ShowMajorTickmarks— задаёт видимость основных отметок.ShowMinorGridlines— задаёт видимость линий сетки, соответствующих второстепенным отметкам.ShowMinorTickmarks— задаёт видимость второстепенных отметок.ShowTitle— задаёт видимость заголовка оси (свойствоTitle).StripsиStripsSource— позволяют закрасить диапазоны между конкретными значениями. См. такжеConstantLinesиConstantLinesSource.Thickness— толщина линии оси.Title— задаёт заголовок оси.TitlePosition— задаёт положение заголовка оси.
Результат¶
Запустите приложение, чтобы увидеть результат этого учебника. Контрол CartesianChart отображает две серии данных с использованием представления Line series view.
Полный код¶
Полный код этого учебника можно найти в модуле Cartesian Chart→Line демонстрационного приложения.
* Эта страница переведена с использованием технологий машинного перевода.


