2013-12-09 2 views
1

привет я новичок в wp8 Я пытаюсь разработать приложение. У меня есть некоторые проблемы, чтобы получить от моего словаря я не знаю, что случилось здесь мой кодwp8 dictionary <строка, список <object>> разрешено

for (int i = 0; i < SharedInformation.tab.Length; i++) 
{ 
    lsCategorie.Clear(); 
    for (int j = 0; j < SharedInformation.SharedLscitation.Count; j++) 
    { 
     if (SharedInformation.tab[i].Equals(SharedInformation.SharedLscitation[j].categorie.ToString())) 
     { 
      lsCategorie.Add(SharedInformation.SharedLscitation[j]); 
     } 
    } 
    SharedInformation.dic.Add(SharedInformation.tab[i], lsCategorie); 
} 

и мой призыв

lsCitation = new List<Citation>(); 
lsCitation = (List<Citation>) SharedInformation.dic["amour"]; 

listbox.DataContext = lsCitation; 

мой полный код

public partial class MainPage : PhoneApplicationPage 
{ 
    private Popup popup; 
    private BackgroundWorker backroungWorker; 
    ShareStatusTask quotesh = new ShareStatusTask(); 
    SmsComposeTask quotesms = new SmsComposeTask(); 
    List<Citation> lsCitation = new List<Citation>(); 
    List<Citation> lsCategorie = new List<Citation>(); 

    // Constructeur 
    public MainPage() 
    { 
     InitializeComponent(); 
     ShowSplash(); 

    } 

    private void ShowSplash() 
    { 
     this.popup = new Popup(); 
     this.popup.Child = new SplashScreen(); 
     this.popup.IsOpen = true; 
     StartLoadingData(); 
    } 

    private void StartLoadingData() 
    { 
     backroungWorker = new BackgroundWorker(); 
     backroungWorker.DoWork += new DoWorkEventHandler(backroungWorker_DoWork); 
     backroungWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backroungWorker_RunWorkerCompleted); 
     backroungWorker.RunWorkerAsync(); 
    } 

    void backroungWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     this.Dispatcher.BeginInvoke(() => 
     { 
      this.popup.IsOpen = false; 

     } 
     ); 
    } 

    void backroungWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     //here we can load data 
     Thread.Sleep(9000); 

     if (IsolatedStorageSettings.ApplicationSettings.Contains("data") == false) 
     { 
      InitializeComponent(); 
      WebClient web = new WebClient(); 
      web.DownloadStringCompleted += web_DownloadStringCompleted; 
      string uri = "http://quotesconsommation.azurewebsites.net/json/json.php"; 
      web.DownloadStringAsync(new Uri(uri)); 
      IsolatedStorageSettings.ApplicationSettings["data"] = 1; 
      IsolatedStorageSettings.ApplicationSettings["citation"] = lsCitation; 
      SharedInformation.SharedLscitation = lsCitation; 
      MessageBox.Show("" + NetworkInterface.GetIsNetworkAvailable() + ""); 

     } 
     else 
     { 
      SharedInformation.SharedLscitation = IsolatedStorageSettings.ApplicationSettings["citation"] as List<Citation>; 
     } 
     for (int i = 0; i < SharedInformation.tab.Length; i++) 
     { 
      lsCategorie.Clear(); 
      for (int j = 0; j < SharedInformation.SharedLscitation.Count; j++) 
      { 

       if (SharedInformation.tab[i].Equals(SharedInformation.SharedLscitation[j].categorie.ToString())) 
       { 
        lsCategorie.Add(SharedInformation.SharedLscitation[j]); 
       } 
      } 
      SharedInformation.dic.Add(SharedInformation.tab[i], lsCategorie); 
     } 
    } 
    void web_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     var rootObject = JsonConvert.DeserializeObject<RootObject>(e.Result); 


     foreach (var blog in rootObject.citation) 
     { 
      lsCitation.Add(blog); 
     } 

и где я звоню

List<Citation> lsCitation; 
    public TOUTES() 
    { 
     InitializeComponent(); 


     lsCitation = new List<Citation>(); 
     lsCitation = (List<Citation>) SharedInformation.dic["amour"]; 

     listbox.DataContext = lsCitation; 

    } 

мю sharedinformation класс

public static class SharedInformation 
{ 

    public static Citation Sharedcitation; 
    public static List<Citation> SharedLscitation; 
    public static Dictionary<string, List<Citation>> dic = new Dictionary<string, List<Citation>>(); 
    public static String[] tab = { "amour", "art et spectacle", "arts et creation", "bonheur", "cinema", "cultures", "famille", "fetes", "humour", "insolite", "livres et lettres", "musique", "nature", "philosophie", "pratique", "proverbes", "sagesse", "sciences", "sport et loisirs", "theatre", "travail" }; 
    public static bool connectionstatus; 
} 
+0

В чем проблема? –

ответ

2

Вы не можете позвонить Clear() на List<T> - вам нужно сделать новый каждый раз:

for (int i = 0; i < SharedInformation.tab.Length; i++) 
{ 
    // Make a new list, don't reuse it! 
    lsCategorie = new List<object>(); 
    for (int j = 0; j < SharedInformation.SharedLscitation.Count; j++) 
    { 

Поскольку List<T> является ссылочный тип (класс), каждый раз, когда вы добавляете, он не добавляет всю копию списка - он просто добавляет ссылку на тот же список. В следующий раз через петлю, вы очистить от старого списка и добавить новые элементы к нему и т.д.

Таким образом, поведение, которое вы увидите, что каждый ключ будет иметь элементы из последних вкладки потому что они все то же самое List<T> экземпляр.

+0

все еще не работает !! Я объясню, в основном, я получаю всю свою информацию из базы данных azure. Я использую json для анализа данных и получения результата в статическом списке объектов, но мне нужно отсортировать этот объект из определенного атрибута и поместить результат в словаре, чтобы сделать вызов проще – Fuujiin

+0

@ user3084145 Я попытался дать вам специфику из вашего вопроса, но есть слишком много проблем, которые могут быть проблематичными. Вам нужно будет запустить его под отладчиком и проверить значения, когда вы вытаскиваете их из Azure, чтобы узнать, что происходит. –

+0

Я получаю все данные от asure, он работает нормально, но строка – Fuujiin

Смежные вопросы