2016-01-11 1 views
0

Так что я использую диаграмму WPFToolKit как ColumnSeries. Когда я первоначально загружаю экран, значения данных правильно заполняются в диаграмме. Однако, когда я пытаюсь обновить данные, данные диаграммы не обновляются.C# WPFToolKit Chart не обновляется при обновлении контекста данных

Я уже пробовал решение, приведенное здесь 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 окна. Когда окно открыто, диаграмма успешно заполняется информацией. Однако, когда я пытаюсь обновить эту информацию после загрузки окна, диаграмма не освежает новый контекст данных.

Любые указания относительно того, что мне нужно сделать, чтобы обновить контекст данных в значениях диаграммы?

+0

Где вы называете 'FillPayoutChart()' from? Вы пытались поставить точку останова рядом с 'chartValues.Clear()', чтобы увидеть, действительно ли «FillPayoutChart()» попадает? – devuxer

+0

Я вызываю его в конструкторе окна, а также кнопку для обновления. Как я уже сказал, он работает в первый раз, когда он вызывается, когда окно действительно загружается. Однако, как только я вызываю его после загрузки окна, он заполняет новый контекст данных, но фактически не обновляет диаграмму, которую видит пользователь. Конечно, это вызов метода. –

ответ

0

Это потому, что вы переопределяете 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 не revieve событие, сбор были изменены.

Смежные вопросы