В настоящее время я перекодирую гистограмму в своем приложении, чтобы использовать класс Chart
из WPF Toolkit. Используя MVVM, я привязываю ItemsSource
из ColumnSeries
на моей диаграмме к свойству в моей модели представления. Вот соответствующий XAML:
<charting:Chart>
<charting:ColumnSeries ItemsSource="{Binding ScoreDistribution.ClassScores}"
IndependentValuePath="ClassName" DependentValuePath="Score"/>
</charting:Chart>
И свойство на модели представления:
// NB: viewmodel derived from Josh Smith's BindableObject
public class ExamResultsViewModel : BindableObject
{
// ...
private ScoreDistributionByClass _scoreDistribution;
public ScoreDistributionByClass ScoreDistribution
{
get
{
return _scoreDistribution;
}
set
{
if (_scoreDistribution == value)
{
return;
}
_scoreDistribution = value;
RaisePropertyChanged(() => ScoreDistribution);
}
}
Однако, когда я обновляю свойство ScoreDistribution
(устанавливая для него новый объект ScoreDistribution
), диаграмма получает дополнительный ряд (на основе нового ScoreDistribution), а также сохраняет исходный ряд (на основе предыдущий ScoreDistribution).
Чтобы проиллюстрировать это, вот несколько снимков экрана, на которых показана диаграмма до обновления (с одной точкой данных в ScoreDistribution.ClassScores
) и после него (теперь с 3 точками данных в ScoreDistribution.ClassScores
):
Теперь я понимаю, что есть другие способы сделать это (например, изменить содержимое исходного объекта ScoreDistribution
, а не заменить его полностью), но я не понимаю, почему это происходит неправильно в его текущей форме. Кто-нибудь может помочь?