如何在单击按钮时更新 WPFToolkit AreaSeries 图表

How To Update WPFToolkit AreaSeries Chart On Button Click

我正在制作基于 WPFToolkit 的图形,每次单击按钮时我都会尝试更新 AreaSeries。 我已经在我的数据 class 上实现了 INotifyPropertyChanged。但是当我重新加载源对象 id 中的数据时,图表(目标对象)

中没有更新

代码如下:

 public partial class MainWindow : Window
{

   static List<Ready4LOS> Ready4LOS = new List<Data.Ready4LOS>();





    public MainWindow()
    {
        InitializeComponent();

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

    private void LoadData()
    {
        var path = @"zxzxzxz.log";
        Ready4LOS.Clear();
        List<APISTATDataModel> daa = APISTATDataModel.GetFromFile(path, new string[] { "|" }, "Ready4TOS");

        List<APISTATDataModel> lastn = daa.GetRange(daa.Count - 10, 10);

        foreach (APISTATDataModel d in lastn)
        {
            Ready4LOS.Add(new Ready4LOS() { Case = d.Current_Count, Time = d.Current_Time });

        }

    }

    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");
        dep.Mode = System.Windows.Data.BindingMode.OneWay;
        indi.Mode = System.Windows.Data.BindingMode.OneWay;
        AreaSeries ares = new AreaSeries();
        ares.ItemsSource = Ready4LOS;
        ares.IndependentValueBinding = dep;
        ares.DependentValueBinding = indi;
        ares.Title = "Ready4LOS";

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

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



    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        LoadData();
        chart1.UpdateLayout();

    }



}

}

数据模型在这里

    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));
        }
    }
}

它在启动时完美加载,因为我一开始就调用了 LoadData()。 问题是当我点击刷新按钮时,它加载了源对象中的数据,但目标对象的数据没有更新,即图表没有更新,它仍然与初始数据相同。

使用 ObservableCollection<Ready4LOS>,而不是 List<Ready4LOS>ObservableCollection<> 已经实现了 INotifyPropertyChangedINotifyCollectionChanged。仅当您要为 Ready4LOS 中已有的 Ready4LOS 动态更改 CaseTime 的值时,才可能需要为 Ready4LOS 实施 INotifyPropertyChanged =25=].