С
this.BestFitness = new ObservableCollection<DataPoint>();
...
вы заменяете полный ItemsSource
сюжета.Так как нет никакого уведомления о просмотре путем вызова RaisePropertyChangedEvent
после этого, связанный график не распознает изменение и график не обновит его точки.
Существует два возможных решения:
1.Используйте INotifyPropertychanged , вызывая RaisePropertyChangedEvent
после замены коллекции.Поэтому
public ObservableCollection<DataPoint> BestFitness { get; set; }
следует расширить до
private ObservableCollection<DataPoint> _BestFitness;
public ObservableCollection<DataPoint> BestFintess
{
get
{
return _BestFitness;
}
private set
{
_BestFitness = value;
RaisePropertyChangedEvent(nameof(BestFintess));
}
}
2.Не заменяйте всю коллекцию ObservableCollection. Просто очистите существующие коллекции и используйте их снова.Это означает использование
this.BestFitniss.Clear();
вместо
this.BestFitness = new ObservableCollection<DataPoint>();
Оба решения уведомляют представление об изменениях, и график обновит свои точки без использования InvalidateFlag
.
Обратите внимание, что необходимо использовать поток пользовательского интерфейса для изменения элементов ObservableCollection
, как описано в в этом вопросе .Поскольку вы используете другой поток для добавления значений, вызывается пользовательский интерфейс, например
Application.Current.Dispatcher.BeginInvoke(() =>
{
BestFitness.Add(new DataPoint(count, args.BestFitness));
});
.