如何在VS2017中清除WPF ChartArea的PlotArea中的数据点

时间:2018-11-03 13:57:14

标签: c# wpf visual-studio-2017 candlestick-chart

我正在VS2017中使用WPF编写一个程序,该程序绘制了股价的烛台图。我使用了一个带有CandleStickSeries的图表,该图表继承自System.Windows.Controls.DataVisualization.Charting的BubbleSeries。

<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上的计数时,它是正确的数量,但是当我查看实时可视树时,我看到烛台的数量不断增加,而没有清除旧的烛台。在此片段中,您可以看到PlotArea显示1650个项目,但它只能是550个。它显示的是应有的三倍 Live Visual Tree

可能是什么原因导致的,我该如何解决?

0 个答案:

没有答案