我正在制作一個 UWP 應(yīng)用程序,我可以在其中導(dǎo)航到帶有列表視圖的頁面。在構(gòu)造函數(shù)中,我調(diào)用了一個異步函數(shù)來設(shè)置listview的itemsource。數(shù)據(jù)存儲在本地,但這需要一些時間來過濾和排序列表。盡管我調(diào)用了一個異步函數(shù),但在設(shè)置列表視圖的 itemsource 之前不會發(fā)生導(dǎo)航。public FriendsPage(){ this.InitializeComponent(); RefreshListViews();}//I tried both these versions: in the first one, //the app clearly takes one extra second to navigate to the page.private async void RefreshListViews(){ await Task.Delay(1000); Listview.ItemsSource = …;}private async void RefreshListViews(){ await Dispatcher.RunAsyn(Windows.UI.Core.CoreDispatcherPriority.Normal,() => { Listview.ItemsSource = …; });}我該如何解決這個問題,以便應(yīng)用程序首先導(dǎo)航,然后過濾/排序/填充列表視圖?
1 回答

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗 獲得超9個贊
您在 的構(gòu)造函數(shù)中添加了額外的邏輯FriendsPage,這是代價高昂的,因為它會延遲頁面的視覺呈現(xiàn),即使此類操作“將”以非阻塞方式執(zhí)行。
解決方案?處理運行此代碼到Page類中內(nèi)置的事件的責(zé)任,并處理到它的導(dǎo)航。該事件是OnNavigatedTo,并在Frame鎖定FriendsPage具有其當(dāng)前頁面時調(diào)用。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// Refresh List Views
}
在同一篇文章中,您可以檢查您可能希望使用該Loaded事件的情況。
我還建議不要創(chuàng)建一個即發(fā)即棄的異步方法,而是更改異步操作的簽名以返回一個可等待的 o:
private async Task RefreshListViews()
{
// Do stuff
}
并等待它在導(dǎo)航事件上的執(zhí)行!
- 1 回答
- 0 關(guān)注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消