你好,我有一个大的数据库,我从哪里拿到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