【问题标题】:C# WPFToolKit Chart is not updating when updating data context更新数据上下文时 C# WPFToolKit 图表未更新
【发布时间】:2016-01-11 21:41:04
【问题描述】:

所以我将 WPFToolKit 图表用作 ColumnSeries。当我最初加载屏幕时,数据值已正确填充到图表中。但是,当我尝试更新数据值时,图表的数据不会刷新。

我已经尝试过Update and refresh wpf chart 此处列出的解决方案,我在其中命名我的列系列并更新列系列而不是图表的 DataContext,但这产生了相同的结果。

这是我的图表的 xaml

    <chartingToolkit:Chart Height="262" HorizontalAlignment="Left" Margin="120,0,0,213" Name="Chart_Payout" Title="Payout Threshold Results" VerticalAlignment="Bottom" Width="360">
        <chartingToolkit:ColumnSeries Name ="ColumnSeries_Payout" DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding}" Title="Payout" />
    </chartingToolkit:Chart>

这是我用来更新图表的方法

    private void FillPayoutChart()
    {
        chartValues.Clear();
        chartValues.Add(new KeyValuePair<string, decimal>("$" + Payout_In.ToString("#,##0.00") + " In", Payout_In));
        chartValues.Add(new KeyValuePair<string, decimal>("", 0));
        chartValues.Add(new KeyValuePair<string, decimal>("$" + Payout_Out.ToString("#,##0.00") + " Out", Payout_Out));
        ColumnSeries_Payout.DataContext = chartValues;
    }

Payout_In 和 Payout_Out 都是在 WPF 窗口类中声明的小数。最初打开窗口时,图表已成功填充信息。但是,当我在加载窗口后尝试更新该信息时,图表并未使用新的数据上下文进行刷新。

关于我需要做什么来刷新图表值中的数据上下文的任何指导?

【问题讨论】:

  • 你从哪里打电话给FillPayoutChart()?您是否尝试在 chartValues.Clear() 旁边放置断点以查看 FillPayoutChart() 是否被命中?
  • 我在窗口的构造函数中调用它以及一个用于更新的按钮。就像我说的,它在实际加载窗口时第一次被调用时起作用。但是,一旦我在加载窗口后调用它,它就会填充新的数据上下文,但实际上并没有更新用户看到的图表。它肯定是在调用该方法。

标签: c# wpf wpftoolkit


【解决方案1】:

这是因为你覆盖了ColumnSeries DataContext 并且旧的绑定会失败。您应该更改将存储为字段或以其他方式存储的现有 DataContext。不要第二次分配 DataContext。

private void FillPayoutChart()
{
    chartValues.Clear();
    chartValues.Add(new KeyValuePair<string, decimal>("$" + Payout_In.ToString("#,##0.00") + " In", Payout_In));
    chartValues.Add(new KeyValuePair<string, decimal>("", 0));
    chartValues.Add(new KeyValuePair<string, decimal>("$" + Payout_Out.ToString("#,##0.00") + " Out", Payout_Out));
    // execute next string just one time and then manipulate chartValues collection
    //ColumnSeries_Payout.DataContext = chartValues;
}

当然,您的 chartValues 应该是 ObservableCollection&lt;KeyValuePair&lt;string, decimal&gt;&gt;,否则您的 ColumnSeries 将不会回复集合已更改的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2021-11-13
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多