Как очистить точки данных в PlotArea области WPF ChartArea в VS2017 - PullRequest
0 голосов
/ 03 ноября 2018

Я пишу программу, использующую WPF в VS2017, которая рисует график цены акций. Я использовал диаграмму с CandleStickSeries, которая наследуется от BubbleSeries из System.Windows.Controls.DataVisualization.Charting.

<Grid Name="maingrid">
        <Grid.Resources>
            <local:CandleStickViewModelCollection x:Key="StockDataCollection" />
        </Grid.Resources>

        <charting:Chart Name="chartInfo">
            <local:CandleStickSeries x:Name="candlesticks"
                Title="{Binding ElementName=Symbol, Path=Text}"
                DataPointStyle="{StaticResource CandleStick}"
                DependentValueBinding="{Binding Path=high}"
                IndependentValuePath="datetime"
                ItemsSource="{DynamicResource StockDataCollection}"
                SizeValueBinding="{Binding Path=WickHeight}" />
            <charting:Chart.Axes>
                <!--  Axis for custom labels  -->
                <charting:DateTimeAxis Orientation="X">
                    <charting:DateTimeAxis.AxisLabelStyle>
                        <Style TargetType="charting:DateTimeAxisLabel">
                            <Setter Property="StringFormat" Value="{}{0:d}" />
                        </Style>
                    </charting:DateTimeAxis.AxisLabelStyle>
                </charting:DateTimeAxis>
            </charting:Chart.Axes>
        </charting:Chart>

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

    private void StepForward_Click(object sender, RoutedEventArgs e)
    {
        var candles = maingrid.Resources["StockDataCollection"] as CandleStickViewModelCollection;
        int i = ++candles.EndIndex;
        EndCandle.Text = i.ToString();
    }

EndIndex - это свойство, которое при установке вызывает функцию Initialize (), которая очищает текущие данные графика и добавляет новый диапазон данных на диаграмму.

    public CandleStickViewModelCollection Initialize()
    {
        Clear();
        if (candleSticks != null)
            for (int ii = StartIndex - 1; ii < EndIndex; ii++)
            {
                Add(candleSticks[ii]);
            }
        return this;
    }

Это отлично работает для нескольких кликов, затем точки данных перестают очищаться, и график начинает добавлять новые свечи поверх старых. Когда я проверяю счетчик ItemsSource, это правильная сумма, однако, когда я смотрю на Live Visual Tree, я вижу, что количество свечей продолжает увеличиваться, не стирая старые. В этом фрагменте вы можете увидеть PlotArea, отображающее 1650 элементов, но оно должно быть только 550. Оно показывает в три раза больше, чем должно Live Visual Tree

Что может быть причиной и как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...