你好,我有一個大的數據庫,我從哪裏拿到1500個值,以便在圖表中顯示。如何將數據點快速添加到WPF圖表
我的問題是,它需要很長時間來顯示所有的點,我認爲是因爲動畫設置。
我該如何改變動畫的速度還是有辦法更快地顯示點?
<UserControl x:Class="Ipte.UI.Pages.StatisticsPage"
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:gcl="clr-namespace:GuiControlLibrary;assembly=GuiControlLibrary"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:time="clr-namespace:Ipte.UI"
xmlns:chartToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
mc:Ignorable="d"
Height="800" Width="1200">
<UserControl.Resources>
<Style x:Key="Scater" TargetType="chartToolkit:ScatterDataPoint">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="chartToolkit:ScatterDataPoint">
<Viewbox x:Name="viewbox">
<!--<Ellipse Width="1" Height="1" Fill="Black"/>-->
</Viewbox>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="4"/>
<Setter Property="Height" Value="4"/>
</Style>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid x:Name="filterGrid" Grid.Column="0" Margin="4">
<StackPanel>
<TextBlock Text="" Margin="2"/>
<toolkit:DatePicker x:Name="dpStartDate" Margin="2" />
<time:TimePicker x:Name="tpStartTime" Margin="2"/>
<TextBlock Text="End date & time:" Margin="2"/>
<toolkit:DatePicker x:Name="dpEndDate" Margin="2"/>
<time:TimePicker x:Name="tpEndTime" Margin="2"/>
<gcl:GuiGroupBox Header="Select router" BorderBrush="LightGray">
<UniformGrid Rows="2" Columns="2">
<CheckBox x:Name="cbEr11" Content="ER 1.1" Margin="2"/>
<CheckBox x:Name="cbEr12" Content="ER 1.2" Margin="2"/>
<CheckBox x:Name="cbEr21" Content="ER 2.1" Margin="2"/>
<CheckBox x:Name="cbEr22" Content="ER 2.1" Margin="2"/>
</UniformGrid>
</gcl:GuiGroupBox>
<TextBlock Text="" Margin="2"/>
<ComboBox x:Name="cmbGoodBad" Margin="2"/>
<TextBlock Text="" Margin="2"/>
<TextBox x:Name="" Margin="2"/>
<TextBlock Text="" Margin="2"/>
<TextBox x:Name="" Margin="2"/>
<gcl:GuiGroupBox Header="Select value" BorderBrush="LightGray">
<StackPanel>
<RadioButton x:Name="combValueA" Content="Value A" Margin="2"/>
<RadioButton x:Name="combValueB" Content="Value B" Margin="2"/>
<RadioButton x:Name="combValueC" Content="Value C" Margin="2"/>
</StackPanel>
</gcl:GuiGroupBox>
<Button x:Name="btnResetFilters" Content="Reset filters" Margin="2 10 2 2" Click="ResetFilters_Click"/>
<Button x:Name="btnUpdateChart" Content="Update Chart" Margin="2 2 2 2" Click="UpdateChartAndFilters_Click"/>
<Button x:Name="btnLoadFile" Content="Load file..." Grid.Column="0" VerticalAlignment="Top" Margin="2" Visibility="Visible" Click="OpenFile_Click"/>
</StackPanel>
<Button x:Name="deleteDatabase" Content="Delete database" Grid.Column="0" VerticalAlignment="Bottom" Margin="2" Click="deleteDatabase_Click"/>
</Grid>
<chartToolkit:Chart Grid.Column="1" x:Name="dataChart">
<chartToolkit:Chart.Series>
<chartToolkit:ScatterSeries x:Name="scatterSeries"
ItemsSource="{Binding}"
DependentValueBinding="{Binding Path=Value}"
IndependentValueBinding="{Binding Path=Key}"
IsSelectionEnabled="False"
AnimationSequence="Simultaneous">
<chartToolkit:ScatterSeries.IndependentAxis>
<chartToolkit:DateTimeAxis Orientation="X" Title="Time"/>
</chartToolkit:ScatterSeries.IndependentAxis>
<chartToolkit:ScatterSeries.DependentRangeAxis>
<chartToolkit:LinearAxis Orientation="Y" Title="Points" x:Name="yAxis"/>
</chartToolkit:ScatterSeries.DependentRangeAxis>
</chartToolkit:ScatterSeries>
<chartToolkit:LineSeries x:Name="lineSeriesMax"
Title="Maximum"
ItemsSource="{Binding}"
DependentValueBinding="{Binding Path=Value}"
IndependentValueBinding="{Binding Path=Key}">
</chartToolkit:LineSeries>
<chartToolkit:LineSeries x:Name="lineSeriesMin"
Title="Minimum"
ItemsSource="{Binding}"
DependentValueBinding="{Binding Path=Value}"
IndependentValueBinding="{Binding Path=Key}">
</chartToolkit:LineSeries>
<chartToolkit:LineSeries x:Name="lineSeriesAvg"
Title="Average"
ItemsSource="{Binding}"
DependentValueBinding="{Binding Path=Value}"
IndependentValueBinding="{Binding Path=Key}">
</chartToolkit:LineSeries>
</chartToolkit:Chart.Series>
</chartToolkit:Chart>
</Grid>
</UserControl>
這是顯示我的積分方式:
你能提供你的數據綁定工作方式(viewmodel等),以及如何填充你的數據嗎? – TripleEEE
從Sqllite數據庫中獲取數據,並將其放入4 ObservableCollection>以顯示它 –
thiseful
您是否使用'.Add(x)'添加數據或者是否使用'.AddRange (名單)'?我認爲'ObservableCollection'會在每一個添加的點上拋出一個'CollectionChangedEvent'(訂閱並測試這個!),這會導致渲染操作 - 如果發生這種情況,您應該停用這個信息(派生並且通過布爾標記來暫停Eventcall)最後一個項目的信息添加。 –
TripleEEE