WPF制作交互式图表

时间:2009-11-16 13:32:49

标签: c# wpf data-visualization

我在我的WPF应用程序中使用 System.Windows.Controls.DataVisualization.Toolkit 。 图表的代码是:

<chartingToolkit:Chart>
                        <!-- Volume -->
                        <chartingToolkit:LineSeries
                            Title="Volume (M)"
                            ItemsSource="{StaticResource StockDataCollection}"
                            IndependentValuePath="Date"
                            DependentValuePath="Volume"/>
                        <!-- Price -->
                        <chartingToolkit:LineSeries
                            Title="Price ($)"
                            ItemsSource="{StaticResource StockDataCollection}"
                            IndependentValuePath="Date"
                            DependentValuePath="Price"/>
                        <chartingToolkit:Chart.Axes>
                            <!-- Axis for custom range -->
                            <chartingToolkit:LinearAxis
                                Orientation="Y"
                                Minimum="0"
                                Maximum="100"
                                ShowGridLines="True"/>
                            <!-- Axis for custom labels -->
                            <chartingToolkit:DateTimeAxis
                                Orientation="X">
                                <chartingToolkit:DateTimeAxis.AxisLabelStyle>
                                    <Style TargetType="chartingToolkit:DateTimeAxisLabel">
                                        <Setter Property="StringFormat" Value="{}{0:MMM d}"/>
                                    </Style>
                                </chartingToolkit:DateTimeAxis.AxisLabelStyle>
                            </chartingToolkit:DateTimeAxis>
                        </chartingToolkit:Chart.Axes>
                    </chartingToolkit:Chart>

我希望用户能够在任何点单击线系列并将其向上或向下拖动,以便更改值? 这就像双向数据绑定,但我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

WPF Toolkit图表控件没有任何代码来处理鼠标拖动,因此您必须自己编写。

您应该能够继承LineDataPoint以添加拖动功能,然后创建子类LineSeries并覆盖CreateDataPoint()以创建自定义LineDataPoint项。

在这种情况下,您的ItemsSource不是IEnumerable值(例如IEnumerable<decimal>),而是值持有者对象(例如IEnumerable<MyValueObject>)。值持有者对象将具有可用于在该点检索或设置值的属性,允许通过将DependentValueBinding设置为与您的属性绑定的TwoWay来更新值。您可以在应用程序中重用现有对象,而不是专门为此目的创建值保持器对象。

答案 1 :(得分:0)