Строю график, отражающий динамику прохождения тестов пользователем. На оси Y отражается коэффициент(результат), на Х - дата выполнения. Данные берутся из пользовательского класса (записи в БД), точке должен соответсвовать объект, чтобы по клику на нее построить диаграмму(уже решено).
Как я вижу конечный график:
только без лейблов над точками.
Основная проблема: если я пытаюсь построить грфик с привязкой IndependentValue к дате, то тесты, пройденные в один день, располагаются один под одним, а если с одинаковым результатом - то одной точкой. Мне надо, чтобы каждая точка была уникальной, пусть даже значения дат на оси X и будут дублироваться.
Пытался привязывать к ID записи - но тогда под осью отображается именно ID, а не дата. Искал, как изменить эти отображаемые значения - простого метода не нашел.
XAML:
xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
<DVC:Chart x:Name="recChart" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" LegendTitle="Стимул" LegendStyle="{DynamicResource LineSeriesLegendStyle}" Title="Динамика">
<DVC:Chart.Axes>
<DVC:LinearAxis Orientation="Y" HorizontalAlignment="Left" ShowGridLines="True"/>
<DVC:CategoryAxis Orientation="X" VerticalAlignment="Bottom" ShowGridLines="True" AxisLabelStyle="{StaticResource Rotation}"/> <!---->
</DVC:Chart.Axes>
<DVC:Chart.Series>
<DVC:LineSeries
x:Name="lsVisual"
Title="Зрительный"
IndependentValuePath="DateOfTesting"
DependentValuePath="E"
ItemsSource="{Binding [0]}"
IsSelectionEnabled="True">
<DVC:LineSeries.DataPointStyle>
<Style TargetType="DVC:LineDataPoint">
<EventSetter Event="MouseLeftButtonUp" Handler="LineDataPoint_MouseLeftButtonUp"/>
<Setter Property="Background" Value="Red" />
</Style>
</DVC:LineSeries.DataPointStyle>
</DVC:LineSeries>
<DVC:LineSeries x:Name="lsAudio"
Title="Акустический"
IndependentValuePath="DateOfTesting"
DependentValuePath="E"
ItemsSource="{Binding [1]}"
IsSelectionEnabled="True">
<DVC:LineSeries.DataPointStyle>
<Style TargetType="DVC:LineDataPoint">
<EventSetter Event="MouseLeftButtonUp" Handler="LineDataPoint_MouseLeftButtonUp"/>
<Setter Property="Background" Value="Blue" />
</Style>
</DVC:LineSeries.DataPointStyle>
</DVC:LineSeries>
<DVC:LineSeries x:Name="lsBlend"
Title="Смешанный"
IndependentValuePath="DateOfTesting"
DependentValuePath="E"
ItemsSource="{Binding [2]}"
IsSelectionEnabled="True">
<DVC:LineSeries.DataPointStyle>
<Style TargetType="DVC:LineDataPoint">
<EventSetter Event="MouseLeftButtonUp" Handler="LineDataPoint_MouseLeftButtonUp"/>
<Setter Property="Background" Value="Green" />
</Style>
</DVC:LineSeries.DataPointStyle>
</DVC:LineSeries>
<DVC:LineSeries
x:Name="lsNoStimul"
Title="Без стимула"
IndependentValuePath="DateOfTesting"
DependentValuePath="E"
ItemsSource="{Binding [3]}"
IsSelectionEnabled="True">
<DVC:LineSeries.DataPointStyle>
<Style TargetType="DVC:LineDataPoint">
<EventSetter Event="MouseLeftButtonUp" Handler="LineDataPoint_MouseLeftButtonUp"/>
<Setter Property="Background" Value="Yellow"/>
</Style>
</DVC:LineSeries.DataPointStyle>
</DVC:LineSeries>
</DVC:Chart.Series>
</DVC:Chart>
</Grid>
CS:
public partial class RecordsChart : UserControl
{
public delegate void PointClickDelegate(Record record);
public event PointClickDelegate PointClicEvent;
public RecordsChart(List<Record> records)
{
InitializeComponent();
List<List<Record>> dataSourceList = SortByStimul(records);
recChart.DataContext = dataSourceList;
}
private List<List<Record>> SortByStimul(List<Record> recordList)
{
List<Record> visual = new List<Record>();
List<Record> audial = new List<Record>();
List<Record> blend = new List<Record>();
List<Record> noStimul = new List<Record>();
foreach (Record record in recordList)
{
switch (record.Stimul)
{
case "Зрительный":
visual.Add(record);
break;
case "Акустический":
audial.Add(record);
break;
case "Смешанный":
blend.Add(record);
break;
case "Без стимула":
noStimul.Add(record);
break;
default:
break;
}
}
var dataSourceList = new List<List<Record>> { visual, audial, blend, noStimul };
return dataSourceList;
}
private void LineDataPoint_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
var ls = sender as LineDataPoint;
var record = ls.DataContext as Record;
PointClicEvent(record);
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Работаю в Wpf с библиотекой Live ChartsНужно обработать нажатие на квадрат,чтобы квадрат заполнился или поменял цвет! Достиг только того что при...
Есть проблема в Unity с сервисами google play