2016-02-11 3 views
1

Я работаю над WPF-приложением, которое использует OxyPlot.WPF - OxyPlot - привязка к DataPoints

Я следовал примеру. Я успешно черчения диаграммы, используя следующий код XAML:

<oxy:Plot Height="640" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch"> 
    <oxy:Plot.Series> 
    <oxy:LineSeries ItemsSource="{Binding ResultSet1}" /> 
    <oxy:LineSeries ItemsSource="{Binding ResultSet2}" /> 
    <oxy:LineSeries ItemsSource="{Binding ResultSet3}" /> 
    </oxy:Plot.Series> 
</oxy:Plot> 

Моего ViewModel выглядит следующим образом:

public class MyViewModel 
{ 
    public IList<DataPoint> ResultSet1 { get; set; } 

    public IList<DataPoint> ResultSet2 { get; set; } 

    public IList<DataPoint> ResultSet3 { get; set; } 

    public void Load() 
    { 
    this.ResultSet1 = new List<DataPoint> 
    { 
     new DataPoint(0, 4), 
     new DataPoint(40, 12), 
     new DataPoint(50, 12) 
    }; 

    this.ResultSet2 = new List<DataPoint> 
    { 
     new DataPoint(-0.4, 3), 
     new DataPoint(8, 12), 
     new DataPoint(48, 11) 
    }; 

    this.ResultSet3 = new List<DataPoint> 
    { 
     new DataPoint(2, 5), 
     new DataPoint(12, 14), 
     new DataPoint(52, 13) 
    }; 
    } 

    public void Refresh() 
    { 
    this.ResultSet1 = new List<DataPoint>(); 
    this.ResultSet2 = new List<DataPoint>(); 
    this.ResultSet3 = new List<DataPoint>(); 
    System.Windows.MessageBox.Show("should be empty"); 
    } 
} 

В моем коде, у меня есть кнопка «Обновить». Когда пользователь нажимает на это, я пытаюсь обновить отображаемые данные. Однако его результаты, как и результаты, не обновляются в пользовательском интерфейсе. Я добавил MessageBox, показанный выше, чтобы убедиться, что я действительно попал в метод Refresh. Появится это окно сообщения. Итак, на данный момент, я знаю:

a) Карточка OxyPlot работает, потому что мои начальные значения результата, жестко закодированные, выглядят отлично. b) Я успешно подключил модель обзора. c) Я получаю метод Refresh.

Я просто не знаю, почему точки на карте, кажется, не освежают. Любые идеи оценены!

+2

Вы должны реализовать 'INotifyPropertyChanged' для модели представления; В противном случае связанный объект 'ItemsSource' в режиме просмотра все еще прослушивает изменение старых объектов и не будет знать, что свойство заменяется (указывая на новый объект после Refresh). – Peter

+0

:). На днях я буду помнить 'INotifyPropertyChanged'. По какой-то причине я всегда забываю. Большое вам спасибо за ваш ответ. – user70192

+1

@Peter, я думаю, вы должны написать ответ на вопрос;) –

ответ

1

вместо использования IList использования ObservableCollection

public ObservableCollection<DataPoint> ResultSet1 { get; set; } 
public ObservableCollection<DataPoint> ResultSet2 { get; set; } 
public ObservableCollection<DataPoint> ResultSet3 { get; set; } 

и вместо использования new IList<T>() использования

ResultSet1.Clear(); 
ResultSet2.Clear(); 
ResultSet3.Clear();