Reputation: 31
Application successfully Adds and Clears data from ColumnSeries WPF chart, but fails to re-add post Clear. Setting DataContext to null prior as advised elsewhere didn't resolve issue. Below is code and thanks for your assistance:
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>
Upvotes: 3
Views: 988
Reputation: 343
The problem is with the 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();
}
DataContext
to null
, but you're not reassigning it afterwards, leaving the data feed broken.columnChart.Series.Clear()
wipes out the ColumnSeries
you declared in XAML. Again, not reassigning causes the chart to remain blank.You could overcome both issues using
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;
}
}
Of course, in case of multiple series with different DataContext
, you'd need to reassign the right Input
to the corresponding series.DataContext
.
Upvotes: 1