gpt4 book ai didi

wpf - 绑定(bind)更新将新闻系列添加到 WPF 工具包图表(而不是替换/更新系列)

转载 作者:行者123 更新时间:2023-12-01 13:26:09 25 4
gpt4 key购买 nike

我目前正在我的应用程序中重新编写条形图,以利用 WPF Toolkit 中的 Chart 类.使用 MVVM,我将图表中 ColumnSeriesItemsSource 绑定(bind)到我的 View 模型上的属性。这是相关的 XAML:

<charting:Chart>
<charting:ColumnSeries ItemsSource="{Binding ScoreDistribution.ClassScores}"
IndependentValuePath="ClassName" DependentValuePath="Score"/>
</charting:Chart>

以及 View 模型上的属性:

// 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):

With a single data point

With 2 more data points added - note the original wide bar behind them

现在,我意识到还有其他方法可以做到这一点(例如,更改原始 ScoreDistribution 对象的内容而不是完全替换它),但我不明白为什么会出错以目前的形式。谁能帮忙?

最佳答案

我遇到了同样的问题。更改 DataPointSeries 的 ItemsSource 时,旧的 DataPoints 未从图表中删除。

我在 WPF 工具包 (DataPointSeries.cs) 中的解决方法...

for 而不是 LoadDataPoints() 中的 foreach 循环,因为我们更改了集合:

for (int i = oldItems.Count - 1; i >= 0; i--)

OnDataPointStateChanged() 中的 if 更改为:

if (dataPoint.State == DataPointState.Hidden || dataPoint.State == DataPointState.PendingRemoval)

这样 DataPoint 将立即被删除。

编辑:
我还必须禁用 DataPoint 动画,描述 here .

关于wpf - 绑定(bind)更新将新闻系列添加到 WPF 工具包图表(而不是替换/更新系列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3039141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com