【问题标题】:How to display data on WPF Toolkit AreaSeries Chart?如何在 WPF Toolkit AreaSeries Chart 上显示数据?
【发布时间】:2016-07-31 14:28:36
【问题描述】:

我正在使用 WPF Toolkit 在 AreaSeries 图表上显示数据,但它没有出现。不知道我做错了什么。请帮助/建议。

下面是xaml代码:

<Window xmlns:chart="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"

x:Class="GRAPHPrototype.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:GRAPHPrototype"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>       
    <chart:Chart Name="chart1">            
    </chart:Chart>
</Grid>

还有 C# 代码:

public partial class MainWindow : Window
{
    static List<Ready4LOS> Ready4LOS = new List<Data.Ready4LOS>();
    public MainWindow()
    {
        InitializeComponent();

        InitChart();
        SampleData();
        chart1.DataContext = Ready4LOS;
    }

    private void SampleData()
    {

        Ready4LOS.Add(new Data.Ready4LOS() { Case = 5, Time = DateTime.Now.AddMinutes(-75) });
        Ready4LOS.Add(new Data.Ready4LOS() { Case = 15, Time = DateTime.Now.AddMinutes(-65) });
        Ready4LOS.Add(new Data.Ready4LOS() { Case = 5, Time = DateTime.Now.AddMinutes(-55) });
        Ready4LOS.Add(new Data.Ready4LOS() { Case = 8, Time = DateTime.Now.AddMinutes(-45) });
        Ready4LOS.Add(new Data.Ready4LOS() { Case = 22, Time = DateTime.Now.AddMinutes(-35) });
        Ready4LOS.Add(new Data.Ready4LOS() { Case = 35, Time = DateTime.Now.AddMinutes(-25) });
        Ready4LOS.Add(new Data.Ready4LOS() { Case = 4, Time = DateTime.Now.AddMinutes(-05) });
    }

    private void InitChart()
    {
        System.Windows.Data.Binding indi = new System.Windows.Data.Binding("Case");
        System.Windows.Data.Binding dep = new System.Windows.Data.Binding("Time");
        AreaSeries ares = new AreaSeries();
        ares.IndependentValueBinding = indi;
        ares.DependentValueBinding = dep;

        DateTimeAxis dta = new DateTimeAxis();
        dta.Interval = 10;
        dta.IntervalType = DateTimeIntervalType.Minutes;
        dta.Title = "Time";
        dta.Orientation = AxisOrientation.X;
        dta.Minimum = DateTime.Now.AddMinutes(-80);
        dta.Maximum = DateTime.Now;

        LinearAxis yaxis = new LinearAxis();
        yaxis.Minimum = 0;
        yaxis.Interval = 2;
        yaxis.Title = "Case";
        yaxis.Orientation = AxisOrientation.Y;
        chart1.Axes.Add(yaxis);
        chart1.Axes.Add(dta);
        chart1.Series.Add(ares);
    }
}

我有这种格式的输入数据

class Ready4LOS : INotifyPropertyChanged
{
    int _case;
    DateTime _time;

    public int Case
    {
        get
        {
            return _case;
        }
        set
        {
            _case = value;
            NotifyPropertyChanged("Case");
        }
    }

    public DateTime Time
    {
        get
        {
            return _time;
        }
        set
        {
            _time = value;
            NotifyPropertyChanged("Time");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

【问题讨论】:

  • 欣赏是否有人格式化问题,如果我没有正确完成:(
  • 感谢 Funk 重新格式化。

标签: c# .net wpf wpftoolkit


【解决方案1】:

您的代码有 2 个问题:

  1. 您没有将您的List 绑定到AreaSeries ItemSource
  2. 你切换了 indi 和 dep Binding

试试

private void InitChart()
{
    System.Windows.Data.Binding indi = new System.Windows.Data.Binding("Case");
    System.Windows.Data.Binding dep = new System.Windows.Data.Binding("Time");
    AreaSeries ares = new AreaSeries();
    ares.ItemsSource = Ready4LOS;
    ares.IndependentValueBinding = dep;
    ares.DependentValueBinding = indi;

    DateTimeAxis dta = new DateTimeAxis();
    dta.Interval = 10;
    dta.IntervalType = DateTimeIntervalType.Minutes;
    dta.Title = "Time";
    dta.Orientation = AxisOrientation.X;
    dta.Minimum = DateTime.Now.AddMinutes(-80);
    dta.Maximum = DateTime.Now;

    LinearAxis yaxis = new LinearAxis();
    yaxis.Minimum = 0;
    yaxis.Interval = 2;
    yaxis.Title = "Case";
    yaxis.Orientation = AxisOrientation.Y;

    chart1.Axes.Add(dta);
    chart1.Axes.Add(yaxis);
    chart1.Series.Add(ares);
}

【讨论】:

  • 非常感谢..我会尝试让你知道这是否有效。
  • @rvsingh42 不客气。在您的原始代码中,您有 ares.IndependentValueBinding = indi; ares.DependentValueBinding = dep; 这给出了错误。改为ares.IndependentValueBinding = dep;ares.DependentValueBinding = indi;
  • 为什么我已经提到了 DataContext 时还需要明确提到 ItemSource ?只是困惑。
  • @rvsingh42 设置 DataContext 没有任何作用,您可以删除该行。不是这样的,你需要设置Series ItemSource。
猜你喜欢
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 2011-03-14
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多