我正在使用 OxyPlot,你可以在这里得到它......它比 WPF 自己的解决方案更好、更容易使用(他们提供的图表 dll 没有文档)。
拥有它后,您可以在代码中执行以下操作:
// Create plot
var plot_model = new PlotModel() { Title = title};
// Create points
var points = from_a_method_linq_Sql_whatever();
var line_series = new LineSeries();
// Add plot to serie
foreach (var point in points)
line_series.Points.Add(point);
// Add them to the plot
plot_model.Series.Add(line_series);
我会将这个图作为一个属性,然后像这样简单地从 XAML 绑定到它:
<oxy:Plot Model="{Binding OutputChart}" />
(确保你有这个在你的 xaml 之上:
xmlns:oxy="clr-namespace:OxyPlot.Wpf;assembly=OxyPlot.Wpf"
您还可以将您的点作为属性公开,并通过 xaml 上的绑定完成所有操作。你的选择。
添加轴和图例很简单,只需快速查看他们的文档/论坛。
编辑:
我在我写的应用程序中使用了这样的东西:
// Running on a collection of objects that have dates and levels, and other things
foreach (var obj in lvl_reps)
{
points.Add(new ExercisePoint
{
DateTime = exercise.Date,
Lvl = obj.Level,
X = DateTimeAxis.ToDouble(exercise.Date.AddHours(-12)),
Y = obj.Reps.Sum(),
Exercise = exercise.Exercise
});
}
不要让ExercisePoint 吓到你,下面是它的实现:
/// <summary>
/// Extends the normal point used by OxyPlot to include the level and the date.
/// The Idea is to use them on the tool tip of the exercise
/// </summary>
class ExercisePoint : IDataPoint
{
public double X { get; set; }
public double Y { get; set; }
public int Lvl { get; set; }
public DateTime DateTime { get; set; }
public string Exercise { get; set; }
}
例如,这就是您可以将自定义字段绑定到点的方式。