2017-02-03 7 views
3

アプリケーションが正常に終了しましたColumnSeries WPFチャートからデータを追加および消去しますが、ポストクリアを再追加することはできません。他の場所でのアドバイスでは問題が解決されなかったため、DataContextをnullに設定してください。以下のコードとご協力に感謝です:WPF Toolkit ColumnSeriesチャートをリアルタイムでリフレッシュする方法

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> 

答えて

1

問題は、コード

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(); 
} 
    であります
  1. DataContextnullに設定していますが、データフィードを壊さずに後で再割り当てする必要はありません。
  2. columnChart.Series.Clear()は、XAMLで宣言したColumnSeriesを消去します。ここでも、再割り当てしないと、グラフは空白のままになります。

あなたは異なるDataContextと複数の系列の場合には、もちろん

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; 
    } 
} 

使用して両方の問題を克服することができ、あなたは、対応するseries.DataContextInputを再割り当てする必要があると思います。

+0

これはうまくいきました。ありがとう! –

関連する問題