0
我注意到每次選擇masterpage菜單項時都會從頭開始加載detailpage(因此每次都會調用它的構造函數)。 有沒有一種方法來實現一次加載的詳細信息頁面,所以每次選擇菜單項目的詳細信息頁面都顯示/不顯示?如何在Xamarin Forms MasterDetailPage項目中加載一次detailpage
感謝, Lewix
我注意到每次選擇masterpage菜單項時都會從頭開始加載detailpage(因此每次都會調用它的構造函數)。 有沒有一種方法來實現一次加載的詳細信息頁面,所以每次選擇菜單項目的詳細信息頁面都顯示/不顯示?如何在Xamarin Forms MasterDetailPage項目中加載一次detailpage
感謝, Lewix
我解決了MasterDetailPage實現詞典頁面緩存:
// in constructor
MasterPageMenuCache = new Dictionary<Type, Page>();
// in OnItemSelected
if (MasterPageMenuCache.Count == 0)
MasterPageMenuCache.Add(typeof(FirstDefaultDetailPage), Detail);
var item = e.SelectedItem as MasterPageItem;
if (item != null)
{
if (MasterPageMenuCache.ContainsKey(item.TargetType))
{
Detail = MasterPageMenuCache[item.TargetType];
}
else
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
MasterPageMenuCache.Add(item.TargetType, Detail);
}
masterPage.ListView.SelectedItem = null;
IsPresented = false;
}
是的,你可以緩存頁面。
下面是一個存儲頁面的字典示例。
public partial class MyMasterDetailPage : MasterDetailPage
{
public MyMasterDetailPage()
{
Pages = new Dictionary<MenuType, Page>();
}
public enum MenuType
{
Home,
Settings,
Map
}
private Dictionary<MenuType, Page> Pages { get; set; }
public async Task NavigateAsync(MenuType id)
{
Page newPage;
if (!Pages.ContainsKey(id)) // check the page is already in the dictionary
{
Page page;
switch (id)
{
case MenuType.Home:
page = new ContentPage()
{
Title = "Home",
};
Pages.Add(id, page);
break;
case MenuType.Map:
page = new ContentPage()
{
Title = "Map",
};
Pages.Add(id, page);
break;
case MenuType.Settings:
page = new ContentPage()
{
Title = "Settings",
};
Pages.Add(id, page);
break;
}
}
newPage = Pages[id];
if (newPage == null)
return;
Detail = newPage; // assign the page
}
}
謝謝馬呂斯,我解決了使用字典由你的建議。 –