Динамическая привязка данных серии WPF Chart - PullRequest
2 голосов
/ 03 сентября 2010

Как мне связать серию диаграмм с источником данных, где данные изменяются?Мне, конечно, понадобится ряд графиков, чтобы отразить изменения в базовых данных.Мне нужен новый угол.

1 Ответ

6 голосов
/ 03 сентября 2010

Я думаю, вы имеете в виду графики из WPF Toolkit. Используйте ObservableCollection для добавления / удаления событий и INotifyPropertyChanged для событий обновления.

Xaml:

<chart:Chart>
    <chart:Chart.Series>
        <chart:LineSeries DependentValuePath="Value" IndependentValuePath="Time"
                Title="Example" x:Name="lineChart">
            <chart:LineSeries.DependentRangeAxis>
                <chart:LinearAxis Orientation="Y" Minimum="0" Maximum="20" />
            </chart:LineSeries.DependentRangeAxis>
        </chart:LineSeries>
    </chart:Chart.Series>
</chart:Chart>

Код:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var r = new Random();
        var Items = new ObservableCollection<ChartItem>(
            Enumerable.Range(0,5).Select(i=>new ChartItem(i,1)).ToList());
        var t = new System.Timers.Timer { Interval = 1000 };
        var start = DateTime.Now;
        //occurs every 1 second
        t.Elapsed += (s, e) => Dispatcher.Invoke((Action)(() =>
                            {
                                Items[r.Next(0, Items.Count)].Value = r.Next(20);
                                Items.Add(new ChartItem((e.SignalTime - start).TotalSeconds, r.Next(20)));
                            }));
        t.Start();
        lineChart.ItemsSource = Items;
    }
}

Класс товара:

public class ChartItem:INotifyPropertyChanged
{
    public ChartItem(double t, double v)
    {
        time = t;
        myVar = v;
    }

    private double time;

    public double Time
    {
        get { return time; }
        set
        {
            time = value;
            OnPropertyChanged("Time");
        }
    }

    private double myVar;

    public double Value
    {
        get { return myVar; }
        set
        {
            myVar = value;
            OnPropertyChanged("Value");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

1012 *

Также динамические диаграммы: http://dynamicdatadisplay.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...