C# WPFToolKit 图表在更新数据上下文时不更新
C# WPFToolKit Chart is not updating when updating data context
所以我将 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 window class 中声明的小数。当 window 最初打开时,图表已成功填充信息。但是,当我在加载 window 后尝试更新该信息时,图表未使用新的数据上下文进行刷新。
关于我需要做什么来刷新图表值中的数据上下文的任何指导?
这是因为您重写了 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<KeyValuePair<string, decimal>>
,否则您的 ColumnSeries
将不会查看集合已更改的事件。
所以我将 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 window class 中声明的小数。当 window 最初打开时,图表已成功填充信息。但是,当我在加载 window 后尝试更新该信息时,图表未使用新的数据上下文进行刷新。
关于我需要做什么来刷新图表值中的数据上下文的任何指导?
这是因为您重写了 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<KeyValuePair<string, decimal>>
,否则您的 ColumnSeries
将不会查看集合已更改的事件。