尽管绑定了正确的数据,但XAML图表未填充Line Series

时间:2015-09-02 14:28:16

标签: c# wpf xaml charts

我在System.Windows.Controls.DataVisualization.Toolkit中使用Chart并绑定到类型为

的对象
ObservableCollection<KeyValuePair<double, double>>

我的图表设置如下图所示,屏幕截图让我将鼠标悬停在绑定源上,因此我知道它绑定到了正确的对象。但是当我运行该程序时,图表完全是空白的。我知道这个设置有效,我在另一个程序中使用完全相同的代码,它完美地工作。我能想到的唯一的事情是一些缺失的引用或某种方式未设置的行的样式。

enter image description here

修改

这是我的代码,它是Runge-Kutta微分方程求解器。我把你给我的线条包括在底部附近。

    public MainWindow()
    {
        InitializeComponent();
    }

    ObservableCollection<KeyValuePair<double, double>> points = new ObservableCollection<KeyValuePair<double, double>>();

    private double function(double t, double y)
    {
        return y + t;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        points.Clear();
        points.Add(new KeyValuePair<double, double>(0, 1));
        double h = .01;

        for (int i = 0; i < 100; i++)
        {
            double k1 = function(points[i].Key, points[i].Value);
            double k2 = function(points[i].Key + (h / 2.0), points[i].Value + (h / 2.0) * k1);
            double k3 = function(points[i].Key + (h / 2.0), points[i].Value + (h / 2.0) * k2);
            double k4 = function(points[i].Key + h, points[i].Value + h * k3);
            double t = points[i].Key + h;
            double y = points[i].Value + (h / 6.0) * (k1 + 2 * k2 + 2 * k3 + k4);

            points.Add(new KeyValuePair<double, double>(t, y));
        }

        chart.DataContext = points;
    }

修改(已解决):

我重构了一个MVVM项目,它现在运行得很好。因此,道德是,远离代码,甚至在微小的项目上。

1 个答案:

答案 0 :(得分:1)

这样做:

Window_Loaded事件中:

  chart.DataContext = points;

在您的XAML中:

<chartingToolkit:Chart x:Name="chart" Margin="0" Title="Chart Title">
    <chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding}" />
</chartingToolkit:Chart>

enter image description here

编辑:完整代码:

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        Random r = new Random();
        ObservableCollection<KeyValuePair<double, double>> points = new ObservableCollection<KeyValuePair<double, double>>();

        for (int i = 0; i < 20; i++)
            points.Add(new KeyValuePair<double, double>(i, r.NextDouble()));

        chart1.DataContext = points;
    }
}

这是使用你的积分的图表:

enter image description here