На диаграммах livecharts необходимо отобразить LabelVisual, который менялся бы при изменении положения курсора

У меня есть несколько диаграмм. На каждой диаграмме есть LabelVisual, текст которого надо менять при изменении положения курсора по оси x. Текст нужно менять на всех диаграммах, а не только над той, над которой расположен курсор. На данный момент у меня получается сделать это только над той диаграммой, над которой расположен курсор.

MainWindow.axaml

<Window>
    <Design.DataContext>
        <vm:MainWindowViewModel2/>
    </Design.DataContext>
    <Window.DataContext>
        <vm:MainWindowViewModel2 />
    </Window.DataContext>
    <ScrollViewer AllowAutoHide="True">
            <ItemsControl x:Name="ItemsGraphs" PointerMoved="ItemsControl_PointerMoved" ItemsSource="{Binding ItemsGraphs}" >
                <ItemsControl.DataTemplates>
                    <views:ItemsTemplateSelector>
                        <DataTemplate x:Key="{x:Type vm:ViewModelLineSmoothness}">
                            <views:LineSmoothness/>
                        </DataTemplate>
                        <DataTemplate x:Key="{x:Type vm:ViewModelDiscreteSignal}">
                            <views:DiscreteSignal/>
                        </DataTemplate>
                    </views:ItemsTemplateSelector>
                </ItemsControl.DataTemplates>
            </ItemsControl>
    </ScrollViewer>
</Window>

LineSmoothness.axaml

<UserControl>
    <lvca:CartesianChart Name="ChartLine"
                        Series="{Binding Series}"
                        Sections="{Binding Sections}"
                        YAxes="{Binding YAxes}"
                        XAxes="{Binding XAxes}"
                        Background="White"
                        Height="200"
                        Margin="5"
                        LegendPosition="Right"
                        LegendTextPaint="{Binding LegendTextPaint}"
                        LegendTextSize="12"
                        TooltipTextSize="10"
                        VisualElements="{Binding VisualElements}"
                        PointerPressedCommand="{Binding PointerDownCommand}"
                        PointerMoveCommand="{Binding PointerMoveCommand}"
                        TooltipPosition ="Auto"
                        ZoomMode="ZoomY">
        <lvca:CartesianChart.DrawMarginFrame>
            <lvc:DrawMarginFrame>
                <lvc:DrawMarginFrame.Stroke>
                    <lvcp:SolidColorPaint Color="#808080" StrokeThickness="1" />
                </lvc:DrawMarginFrame.Stroke>
            </lvc:DrawMarginFrame>
        </lvca:CartesianChart.DrawMarginFrame>
    </lvca:CartesianChart>

</UserControl>

ViewModelLineSmoothness.cs

...
        public LiveChartsCore.SkiaSharpView.VisualElements.LabelVisual labelMarker;

        public ObservableCollection<ChartElement<SkiaSharpDrawingContext>> VisualElements  => visuals;

        public ViewModelLineSmoothness()
        {
            labelMarker = new LiveChartsCore.SkiaSharpView.VisualElements.LabelVisual
            {
                HorizontalAlignment = Align.Start,
                TextSize = 15,
                X = 100,
                Y = 100,
                Paint = new SolidColorPaint(SKColors.Red)
                {
                    ZIndex = 11,
                    SKTypeface = SKTypeface.FromFamilyName("Courier New")
                },
                BackgroundColor = new LvcColor(55, 71, 79).WithOpacity(10),
                Padding = new Padding(5),
                LocationUnit = MeasureUnit.Pixels,
            };
            visuals.Add(labelMarker);
        }
        [RelayCommand]
        public void PointerMoveCommand(PointerCommandArgs args)
        {
           labelMarker.Text = $"{args.PointerPosition.X:f2}";
           labelMarker.X = args.PointerPosition.X;
           labelMarker.Y = args.PointerPosition.Y;
           labelMarker.Invalidate((Chart<SkiaSharpDrawingContext>)args.Chart.CoreChart);
        }
...

Ответы (0 шт):