LS,
我正在构建一个应用程序。该应用程序由两个屏幕组成。在第一个屏幕上,用户可以选择一个文件,在第二个屏幕上,该文件显示一个图表和一个数据网格。
目前我对这个应用程序有两个大问题。
第一个问题是数据绑定到图表需要很长时间(如果数据集是 85 项,绑定时间可能需要 40 秒)。
第二个问题是当我从第二页回到第一页时,第二页没有被处理。它继续耗尽内存。这反过来又会对第一个问题产生影响,使绑定时间更长。
有人可以帮我解决这个问题吗?(带有清晰的代码示例)
我使用以下代码来切换屏幕:
<Grid x:Name="LayoutRoot">
<Grid x:Name="NavigationGrid" HorizontalAlignment="Stretch" VerticalAlignment="Top" Background="LightGray">
<StackPanel x:Name="LinksStackPanel" Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0">
<HyperlinkButton x:Name="Link1" Width="100" Height="30" NavigateUri="/Home" TargetName="ContentFrame" Content="Home" />
</StackPanel>
<StackPanel x:Name="LinksStackPanel2" Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="100,0,0,0">
<HyperlinkButton x:Name="Link2" Width="100" Height="30" NavigateUri="/DataPage" TargetName="ContentFrame" Content="DataPage" />
</StackPanel>
</Grid>
<Border x:Name="ContentBorder" Margin="0,30,0,0">
<navigation:Frame x:Name="ContentFrame" Source="/Home" >
<navigation:Frame.UriMapper>
<uriMapper:UriMapper>
<uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
<uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
</uriMapper:UriMapper>
</navigation:Frame.UriMapper>
</navigation:Frame>
</Border>
</Grid>
第一页的代码不是很重要。它包含一个选择字段,您可以在其中选择将在第二页中打开的文件名。我制作了一个测试应用程序并将此页面留空,但仍然存在内存泄漏。
第二页的代码是:
public partial class DataPage : Page
{
private List<Classes.Data> dataList = new List<Classes.Data>();
public DataPage()
{
InitializeComponent();
setData(); //Get data, normaly from database.
MainDataGrid.ItemsSource = dataList; //Bind data from datalist to datagrid
bindChart(); //Bind data from datalist to chart.
}
private void setData()
{
Classes.Data data = new Classes.Data() { distance = 1, name = "First item", var1 = 1, var2 = 2, var3 = 3, var4 = 4, var5 = 5 };
dataList.Add(data);
data = new Classes.Data() { distance = 1.5, name = "Second item", var1 = 1.5, var2 = 2.5, var3 = 3.5, var4 = 4.5, var5 = 5.5 };
dataList.Add(data);
data = new Classes.Data() { distance = 2, name = "Third item", var1 = .5, var2 = 1.5, var3 = 2.5, var4 = 3.5, var5 = 4.5 };
dataList.Add(data);
data = new Classes.Data() { distance = 2.5, name = "Fourth item", var1 = 3, var2 = 4, var3 = 5, var4 = 6, var5 = 7 };
dataList.Add(data);
data = new Classes.Data() { distance = 3, name = "Fifth item", var1 = 0, var2 = 1, var3 = 2, var4 = 3, var5 = 4 };
dataList.Add(data);
}
private void bindChart()
{
for (int i = 0; i < 5; i++)
{
//Bind each Lineseries to datalist.
LineSeries lineSeries = (LineSeries)dataChart.Series[i];
lineSeries.ItemsSource = dataList;
}
}
private void backBtn_Click(object sender, RoutedEventArgs e)
{
Home home = this.Parent as Home; //Get parent.
home.Change_ContentFrame(new Home()); //Set parent to new page.
}
//Data grid events. - Start.
private void MainDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
}
private void MainDataGrid_KeyDown(object sender, KeyEventArgs e)
{
}
private void MainDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
private void MainDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
}
//Data grid events. - End.
//Data chart events. - Start.
private void dataChart_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
private void dataChart_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
}
private void dataChart_KeyDown(object sender, KeyEventArgs e)
{
}
//Data chart events. - End.
}