Graph works on first tabitem but not second tabite

2019-08-14 16:29发布

I am using Wpf Toolkit for the graph, and I realise that it doesn't work when I place it as the second tabitem. What could be the problem?

This is my graph:

<TabControl>
    <TabItem Header="PowerFlow">
    </TabItem>
    <TabItem Header="Graph" Name="Graphs">
        <ScrollViewer HorizontalScrollBarVisibility="Auto" 
VerticalScrollBarVisibility="Auto" Margin="0,-28,0,28">
            <Grid Height="921" Background="DarkGray">
                <chartingToolkit:Chart  Name="lineChart" Title="Power Graph" Background="YellowGreen" Foreground="DarkBlue"                   
               VerticalAlignment="Top" Margin="16,36,20,0" Height="432"  IsEnabled="True" >
                    <chartingToolkit:LineSeries Title="SolarCell"     
    ItemsSource="{Binding}" DependentValueBinding="{Binding Path=Value}" 
    IndependentValueBinding="{Binding Path=Key}"
         IsSelectionEnabled="True" DataContext="{Binding}">
                        <chartingToolkit:LineSeries.DependentRangeAxis>
                            <chartingToolkit:LinearAxis Orientation="Y" Title="Power (W)"></chartingToolkit:LinearAxis>
                        </chartingToolkit:LineSeries.DependentRangeAxis>
                    </chartingToolkit:LineSeries>
                </chartingToolkit:Chart>
                <Button Content="Refresh" Height="23" HorizontalAlignment="Left" Margin="718,391,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
                <TextBox Height="23" HorizontalAlignment="Left" Margin="696,73,0,0" Name="textBox7" VerticalAlignment="Top" Width="97" Loaded="textBox7_Loaded" />
                <Label Content="Time started:" Height="28" HorizontalAlignment="Left" Margin="606,73,0,0" Name="label1" VerticalAlignment="Top" Width="84" />
            </Grid>
        </ScrollViewer>
    </TabItem>
</TabControl>
</Window>

and the code behind:

public partial class MainWindow : Window
{
    ObservableCollection<KeyValuePair<double, double>> Power = new ObservableCollection<KeyValuePair<double, double>>();
    double i = 0;

    public MainWindow()
    {

        InitializeComponent();
        TabItem Graphs = new TabItem();
        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = new TimeSpan(0, 0, 1);  // per 5 seconds, you could change it
        timer.Tick += new EventHandler(timer_Tick);
        timer.IsEnabled = true;
    }



    Random random = new Random(DateTime.Now.Millisecond);
    void timer_Tick(object sender, EventArgs e)
    {

        Power.Add(new KeyValuePair<double, double>(i, random.NextDouble()));
        i += 5;
        lineChart.DataContext = Power;

    }

}
}

1条回答
该账号已被封号
2楼-- · 2019-08-14 16:59

If you remove the line

DataContext="{Binding}"

from the LineSeries it should work. Unfortunately I can't explain why it isn't working. But as DataContexts are usually derived in the control hierarchy it isn't necessary at this point and somehow leads to this strange issue.

HTH

查看更多
登录 后发表回答