2016-05-13 52 views

回答

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

谢谢马吕斯,我解决了使用字典由你的建议。 –