2017-02-03 3 views
3

Anwendung erfolgreich Fügt Daten aus dem ColumnSeries WPF-Diagramm hinzu und löscht sie, fügt jedoch nach dem Löschen nicht mehr hinzu. Wenn Sie DataContext wie zuvor an anderer Stelle als null festgelegt haben, wurde das Problem nicht behoben. Im Folgenden finden Sie Code und Dank für Ihre Unterstützung:So aktualisieren Sie das WPF Toolkit ColumnSeries-Diagramm in Echtzeit

public partial class MainWindow : Window 
{ 

    public MainWindow() 
     { 
      dataToChart = new Input(); 
      InitializeComponent(); 
      this.DataContext = dataToChart; 
     } 

    private void Button_Click_Clear(object sender, RoutedEventArgs e) 
     { 
      foreach (var series in columnChart.Series.OfType<Series>()) 
       { 
        series.DataContext = null; 
       } 
       columnChart.Series.Clear(); 
       dataToChart.Clear(); 
     } 

    private void Button_Click_Add(object sender, RoutedEventArgs e) 
     { 
      dataToChart.Add(new KeyValuePair<string, int>("Test", 10)); 
     } 
} 

Input.cs

public class Input 
{ 
    public ObservableCollection<KeyValuePair<string, int>> ValueList { get; private set; } 

    public Input() 
    { 
     this.ValueList = new ObservableCollection<KeyValuePair<string, int>>(); 
    } 

    public void Add(KeyValuePair<string, int> data) 
    { 
     ValueList.Add(data); 
    } 

    public void Clear() 
    { 
     ValueList.Clear(); 
    } 
} 

MainWindow.xaml

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
     x:Class="IES_Console.MainWindow" 
     x:Name="wndMain" Title="IES Console" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="Manual" ResizeMode="NoResize" Background="Transparent" Foreground="{x:Null}" Loaded="Window_Loaded" Closing="Window_Closing" KeyUp="Window_KeyUp" MouseLeftButtonDown="Window_MouseLeftButtonDown" SizeChanged="Window_SizeChanged" LocationChanged="Window_LocationChanged" Icon="/IES%20Console;component/48x48.ico" MouseLeave="wndMain_MouseLeave" mc:Ignorable="d" FontFamily="Arial" Width="Auto" Height="Auto" SizeToContent="WidthAndHeight"> 


    <Grid x:Name="MainGrid" Background="Black" ShowGridLines="False" Width="531" Height="700" VerticalAlignment="Top" HorizontalAlignment="Left"> 

     <!--Code taken out for simplicity--> 


     <Grid x:Name="subFooter" Grid.Row="3" Background =" Black" Margin="0,20,0,-144"> 


      <TextBlock x:Name="textBlock1" VerticalAlignment="top" Margin="10,10,0,0" TextWrapping="Wrap" 
       Text="TextBlock" Foreground="White" Width="511" Height="50"/> 

      <chartingToolkit:Chart Height="262" HorizontalAlignment="Left" 
            Margin="33,0,0,10" Name="columnChart" Title="Column Series Demo" 
            VerticalAlignment="Bottom" Width="360"> 

       <chartingToolkit:ColumnSeries DependentValuePath="Value" Visibility="Visible" 
             IndependentValuePath="Key" ItemsSource="{Binding ValueList}" /> 

       <chartingToolkit:Chart.LegendStyle> 
        <Style TargetType="Control"> 
         <Setter Property="Width" Value="0" /> 
         <Setter Property="Height" Value="0" /> 
        </Style> 
       </chartingToolkit:Chart.LegendStyle> 

      </chartingToolkit:Chart> 

      <Button Content="Data Clear" HorizontalAlignment="Left" Margin="426,65,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_Clear"/> 
      <Button Content="Data Add" HorizontalAlignment="Left" Margin="426,108,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_Add"/> 

     </Grid> 
    </Grid> 
</Window> 

Antwort

1

Das Problem mit dem Code

private void Button_Click_Clear(object sender, RoutedEventArgs e) 
{ 
    foreach (var series in columnChart.Series.OfType<Series>()) 
    { 
     series.DataContext = null; 
    } 
    columnChart.Series.Clear(); 
    dataToChart.Clear(); 
} 
    ist
  1. Sie setzen die DataContext auf null, aber Sie werden sie anschließend nicht neu zuweisen, sodass der Daten-Feed unterbrochen wird.
  2. Die Zeile columnChart.Series.Clear() löscht die ColumnSeries, die Sie in XAML deklariert haben. Auch hier führt das erneute Zuweisen nicht dazu, dass das Diagramm leer bleibt.

Sie beiden Probleme überwinden können

private void Button_Click_Clear(object sender, RoutedEventArgs e) 
{ 
    dataToChart.Clear(); 
    foreach (var series in columnChart.Series.OfType<Series>()) 
    { 
     series.DataContext = null; 
     series.DataContext = dataToChart; 
    } 
} 

Natürlich verwenden, bei mehreren Serien mit verschiedenen DataContext, würden Sie die rechtsInput zu den entsprechenden series.DataContext neu zuweisen müssen.

+0

Das hat funktioniert, danke! –

Verwandte Themen