В настоящее время я перекодирую столбчатую диаграмму в своем приложении, чтобы использовать класс Chart
в WPF Toolkit . Используя MVVM, я связываю ItemsSource
из ColumnSeries
в моем графике со свойством моей модели представления. Вот соответствующий XAML:
<charting:Chart>
<charting:ColumnSeries ItemsSource="{Binding ScoreDistribution.ClassScores}"
IndependentValuePath="ClassName" DependentValuePath="Score"/>
</charting:Chart>
И свойство на viewmodel:
// 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
объекта, а не заменить его полностью), но я не понимаю, почему он идет не так в его текущей форме. Кто-нибудь может помочь?