在UWP应用的第一页上,我在CommandBar中有一个“添加”按钮,可打开第二页。
在第二页的开头,我从SQLite表中加载了一个列表,并过滤了该列表。这个过程比较长,因为有很多数据。
当我单击第一页上的“添加”按钮时,它在加载列表的整个过程中始终突出显示,而第二页仅在列表加载到内存中时打开。
我希望用户单击“添加”按钮后立即打开第二页,并显示一个ProgressRing而不是ListView(运行数据加载的时间)。
我试图在第一页上放置一个ProgressRing:
private void AddFavori_Click(object sender, RoutedEventArgs e)
{
MyProgressRing.Visibility = Visibility.Visible;
Frame.Navigate(typeof(ChoixFavoris), currentListeAchat);
}
但是,什么也不显示。在第二页上也是一样:
public ChoixFavoris()
{
this.InitializeComponent();
MyProgressRing.Visibility = Visibility.Visible;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
currentListeAchat = e.Parameter as ListeAchats;
textBlock.Text = currentListeAchat.NomListe;
majtableArticles();
//
base.OnNavigatedTo(e);
// Register for hardware and software back request from the system
SystemNavigationManager systemNavigationManager = SystemNavigationManager.GetForCurrentView();
systemNavigationManager.BackRequested += OnBackRequested;
MyProgressRing.Visibility = Visibility.Collapsed;
}
该怎么做?谢谢任何能帮助我的人。
答案 0 :(得分:0)
我希望在用户单击“添加”按钮后立即打开第二页,并显示一个ProgressRing而不是ListView,这是运行数据加载的时间。我试图在第一页上放置一个ProgressRing:
您最好将majtableArticles()
方法作为异步方法。并且将ProgressRing控件放在第二页上会更好。
如果您不知道如何制作异步方法,请参见Asynchronous programming。
我制作了一个简单的代码示例供您参考。我只是使用await Task.Delay(10000)
模拟了您耗时的加载数据操作。
//MainPage.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPage1));
}
<!--BalnkPage1.xaml-->
<Grid>
<ProgressRing x:Name="progressring" Height="100" Width="100" Visibility="Collapsed" IsActive="False"></ProgressRing>
</Grid>
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
progressring.IsActive = true;
progressring.Visibility = Visibility.Visible;
await Task.Delay(10000);
progressring.IsActive = false;
progressring.Visibility = Visibility.Collapsed;
}
[已于2018/8/1更新]
@Marcel Delhaye这只是一个有关如何将同步方法转换为异步方法的简单示例。
private void Test()
{
while (true)
{
Debug.WriteLine(DateTime.Now);
}
}
private async Task TestAsync()
{
await Task.Run(() => {
while (true)
{
Debug.WriteLine(DateTime.Now);
}
});
}
//on BalnkPage1.xaml.cs
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
progressring.IsActive = true;
progressring.Visibility = Visibility.Visible;
await TestAsync();
progressring.IsActive = false;
progressring.Visibility = Visibility.Collapsed;
}
答案 1 :(得分:0)
我在第一页中添加了以下代码:
private async void AddFavori_Click(object sender, RoutedEventArgs e)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
MyProgressRing.IsActive = true;
});
await Task.Delay(1000);
Frame.Navigate(typeof(ChoixFavoris), currentListeAchat);
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
MyProgressRing.IsActive = false;
});
}
此外,在数据加载过程中,我在第一页上显示了ProgressRing。