2016-05-13 7 views
0

masterpageメニュー項目が選択されるたびにdetailpageが読み込まれます(コンストラクタは毎回呼び出されます)。 一度ロードされるディテールページを実装する方法はありますか?毎回メニュー項目が選択されるので、詳細ページは単に表示されるか表示されませんか?Xamarin Forms MasterDetailPageプロジェクトでdetailpageを1回ロードする方法

おかげで、 Lewix

答えて

0

私は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; 
} 
0

はい、あなたがページをキャッシュすることができます。

次の例は、ページを格納する辞書です。

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 
    } 
} 
+0

はあなたのマリウスをありがとう、私は辞書を使って解きます。 –

関連する問題