Как связать WPF LiveCharts (LVC) с возможностью детализации? - PullRequest
0 голосов
/ 19 ноября 2018

В настоящее время я изучаю WPF и решаюсь WPF LiveCharts (LVC) . Я понимаю, что на графике есть событие Chart.DataClick, которое может быть привязано к точке на графике. Однако я не могу заставить событие заполнить новую диаграмму (заменяя старую диаграмму) на основе нажатой точки, что должно дать мне развернутый обзор этой точки.

Я ссылался на этот пример , однако я не уверен, как связать новую коллекцию серий на основе точки нажатия и привязать ее к моему графику.

Теоретически я подумал о следующих шагах,

  1. Пользователь нажимает на точку, а ее код проверяет название точки и получает новое предопределенное свойство seriescollection
  2. Диаграмма, которая уже была заполнена на основе datacontext и Series, в XAML, заменена новым свойством bindingsource seriescollection2 в том же классе.

Здесь я немного сбит с толку, так как не уверен в том, как выполнить MVVM коллекцию серий с диаграммой, как в примере , над которым я работаю , похоже, не реализован MVVM.

Я прочитал о IObservableChartPoint документации и у меня есть представление, что это может быть ключом к достижению, которое я ищу. Странно, что никто не опубликовал что-либо о реализации этой библиотеки для достижения детализации.

Я хотел бы использовать диаграмму, читая плоский файл с данными точек серии и отображая их в виде пончика или столбчатой ​​диаграммы. Я публикую код, который мог бы написать для достижения того, чего я хочу.

Код позади:

Public ReadOnly Property SeriesCOllection2 As SeriesCollection
    Get
        _SeriesCollection2 = New SeriesCollection From {
            New PieSeries With {
                .Title = "Page1",
                .Values = New ChartValues(Of ObservableValue) From {
                    New ObservableValue(8)
                },
                .DataLabels = True
            },
            New PieSeries With {
                .Title = "Pag2",
                .Values = New ChartValues(Of ObservableValue) From {
                    New ObservableValue(6)
                },
                .DataLabels = True
            },
            New PieSeries With {
                .Title = "Pag3",
                .Values = New ChartValues(Of ObservableValue) From {
                    New ObservableValue(10)
                },
                .DataLabels = True
            },
            New PieSeries With {
                .Title = "Pag4",
                .Values = New ChartValues(Of ObservableValue) From {
                    New ObservableValue(4)
                },
                .DataLabels = True
            },
              New PieSeries With {
                .Title = "Pag5",
                .Values = New ChartValues(Of ObservableValue) From {
                    New ObservableValue(4)
                },
                .DataLabels = True
            }
        }
        Return _SeriesCOllection2
    End Get

End Property>

Код позади событий:

Private _SeriesCOllection2 As SeriesCollection
Public Property SeriesCollection As SeriesCollection

Private Sub Chart_DataClick(sender As Object, chartPoint As ChartPoint) ' Click event on chart data point
    If chartPoint.SeriesView.Title.ToLower.Equals("opera") Then
        Chart.Series = _SeriesCOllection2
    End If
End Sub

Private Sub Button_Click(sender As Object, e As RoutedEventArgs) ' Reset the chart
    Chart.Series = SeriesCollection
End Sub

Диаграмма XAML:

d:DataContext="{d:DesignInstance local:BasicChart}"     
<lvc:PieChart
                Name="Chart"
                Grid.Row="1"
                Margin="0,15"
                DataClick="Chart_DataClick"
                InnerRadius="80"
                Series="{Binding SeriesCollection}">

                <lvc:PieChart.DataTooltip>
                    <lvc:DefaultTooltip SelectionMode="OnlySender" />
                </lvc:PieChart.DataTooltip>

            </lvc:PieChart>

Кто-нибудь имеет какое-либо представление об этом или указывает мне правильное направление? Небольшое прохождение кода также будет полезно в случае решения.

PS: я использую WPF vb.net.

...