masterpageメニュー項目が選択されるたびにdetailpageが読み込まれます(コンストラクタは毎回呼び出されます)。 一度ロードされるディテールページを実装する方法はありますか?毎回メニュー項目が選択されるので、詳細ページは単に表示されるか表示されませんか?Xamarin Forms MasterDetailPageプロジェクトでdetailpageを1回ロードする方法
おかげで、 Lewix
masterpageメニュー項目が選択されるたびにdetailpageが読み込まれます(コンストラクタは毎回呼び出されます)。 一度ロードされるディテールページを実装する方法はありますか?毎回メニュー項目が選択されるので、詳細ページは単に表示されるか表示されませんか?Xamarin Forms MasterDetailPageプロジェクトでdetailpageを1回ロードする方法
おかげで、 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
}
}
はあなたのマリウスをありがとう、私は辞書を使って解きます。 –