locked
utilizzo listpicker RRS feed

  • Domanda

  • ciao a tutti,


    ho un ListPicker, dove precarico il nome di alcune città. Ora, leggo da un file preferenze il nome della città precedentemente selezionata dall'utente.

    Ora vorrei settare l'item selezionato del listpicker con il nome della città presente nelle preferenze.

    Es LP = {Bari, Milano, Torino}

    L'utente ha messo come preferenza milano, quindi vorrei che all'avvio il listpiker mostrasse come item selezionato Milano (in questo esempio so che è nella posizione 1...ma nel mio non so il numero dell'item che corrisponde a milano.

    Come posso fare? Volendo potrei scorrere tutto il listpiker e vedere quando il nome corrisponde a milano...e poi salvarmi la posizione. Però non riesco

    Una volta selezionato il listpicker dall'utente...come faccio a ricavarne il nome associato?

    LPnumero_ricerche.SelectedItem.ToString()

    perchè il codice qua sopra non mi restituisce il nome dell'item selezionato.

    Sapreste aiutarmi?

    Grazie

    Mattia


    venerdì 22 giugno 2012 09:00

Risposte

  • Sto provando a fare un encoding del mio testo 

    Encoding iso, utf8;
    iso = Encoding.GetEncoding("ISO-8859-1");
    utf8 = Encoding.UTF8;
    
    dati2[0] = utf8.GetString(iso.GetBytes(dati2[0]));

    però mi dice: 

    Errore	1	'System.Text.Encoding.GetString(byte[])' è inaccessibile a causa del livello di protezione	C:\Users\Mattia\Documents\Visual Studio 2010\Projects\p1\p1\settings.xaml.cs	202	44	p1

    Ti conviene impostare la giusta codifica prima di scaricare i tuoi dati:

               var wb = new WebClient();
                wb.Encoding = Encoding.GetEncoding("ISO-8859-1");
                wb.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wb_DownloadStringCompleted);
                wb.DownloadStringAsync(new Uri("http://"));


    sabato 23 giugno 2012 16:03
    Postatore
  • Ciao,

    SelectedItem è un oggetto della tua collezione e non una "semplice" stringa, devi quindi convertirlo:

    var item = LPnumero_ricerche.SelectedItem as TuoOggetto;
    
    if(item!=null)
       MessageBox.Show(item.XXXX);

    Nell'esempio di prima in pratica devi fare così:

    var item = LPnumero_ricerche.SelectedItem as Items_stazioni; if(item!=null) MessageBox.Show(item.Icitta);

    Stefano

    • Contrassegnato come risposta Ronca giovedì 28 giugno 2012 13:04
    giovedì 28 giugno 2012 09:30
    Postatore

Tutte le risposte

  • Ciao Mattia,

    stai lavorando con delle semplici stringhe? Stai usando il data binding?

    In generale comunque devi semplicemente leggere e settare il SelectedItem

        private void PageTitle_Tap(object sender, System.Windows.Input.GestureEventArgs e)
            {
                if (LPnumero_ricerche.Items.Count == 0)
                {
                    LPnumero_ricerche.Items.Add("Bari");
                    LPnumero_ricerche.Items.Add("Milano");
                    LPnumero_ricerche.Items.Add("Torino");
                }
                else
                {
                    var item = LPnumero_ricerche.Items.FirstOrDefault(x => x.Equals("Milano"));
    
                    if (item != null)
                        LPnumero_ricerche.SelectedItem = item;
    
    
                    // potresti fare semplicemente così:
                    // LPnumero_ricerche.SelectedItem = "Milano";
                    // ma devi essere certo che l'elemento sia presente
                }
            }

    Stefano

    • Contrassegnato come risposta Ronca sabato 23 giugno 2012 14:49
    • Contrassegno come risposta annullato Ronca sabato 23 giugno 2012 14:53
    venerdì 22 giugno 2012 09:21
    Postatore
  • Ciao Mattia,

    stai lavorando con delle semplici stringhe? Stai usando il data binding?

    In generale comunque devi semplicemente leggere e settare il SelectedItem

        private void PageTitle_Tap(object sender, System.Windows.Input.GestureEventArgs e)
            {
                if (LPnumero_ricerche.Items.Count == 0)
                {
                    LPnumero_ricerche.Items.Add("Bari");
                    LPnumero_ricerche.Items.Add("Milano");
                    LPnumero_ricerche.Items.Add("Torino");
                }
                else
                {
                    var item = LPnumero_ricerche.Items.FirstOrDefault(x => x.Equals("Milano"));
    
                    if (item != null)
                        LPnumero_ricerche.SelectedItem = item;
    
    
                    // potresti fare semplicemente così:
                    // LPnumero_ricerche.SelectedItem = "Milano";
                    // ma devi essere certo che l'elemento sia presente
                }
            }

    Stefano

     Ciao, ho provato con l metodo che mi hai descritto ma non funziona....

    io ho inserito questo codice:

    this.LPnumero_ricerche.ItemsSource = GenreList.OrderBy(x => x.Icitta).ToList();
                        LeggiFile_preferenze();
                        i = 0;
                        foreach (Items_stazioni items_stazioni in GenreList)
                        {
                            if (items_stazioni.Icodice == temp_pref)
                            {
                                temp_citta = items_stazioni.Icitta;
                            }
                        }
                        var item = LPnumero_ricerche.Items.FirstOrDefault(x => x.Equals(temp_citta));
                        if (item != null)
                        {
                            LPnumero_ricerche.SelectedItem = item;
                        }

    E nella lista è presente la città "Milano"...però quando vado a cercarla non me la trova....e quindi item resta = null e mi salta l'if. Forzando l'If invece mi da errore.

    sabato 23 giugno 2012 14:55
  • può essere dovuto al fatto che alcuni nomi della lista, dove dovrei avere una lettera accentata, ho un simbolo con il punto di domanda?

    Scarico la lista da internet e probabilmente ha una codifica diversa. Devo convertire il testo prima di salvarlo nel ListPicker?

    Sto provando a fare un encoding del mio testo 

    Encoding iso, utf8;
    iso = Encoding.GetEncoding("ISO-8859-1");
    utf8 = Encoding.UTF8;
    
    dati2[0] = utf8.GetString(iso.GetBytes(dati2[0]));

    però mi dice: 

    Errore	1	'System.Text.Encoding.GetString(byte[])' è inaccessibile a causa del livello di protezione	C:\Users\Mattia\Documents\Visual Studio 2010\Projects\p1\p1\settings.xaml.cs	202	44	p1
    

    • Modificato Ronca sabato 23 giugno 2012 15:20
    sabato 23 giugno 2012 15:04
  • Il problema della codifica dovrebbe essere secondario perché mi sembra di capire che tu stia facendo il controllo sul campo "Icodice" che non dovrebbe contenere accenti.

    Non riesco a seguire il codice che hai postato, comunque mi pare che ci siano degli errori.

    Guarda quest'esempio:

        public partial class MainPage : PhoneApplicationPage
        {
            public MainPage()
            {
                InitializeComponent();
                Load();
            }
            
            public class Items_stazioni
            {
                public string Icitta { get; set; }
                public string Icodice { get; set; }
            }
            
            public List<Items_stazioni> GenreList = new List<Items_stazioni>();
    
            private void LoadSampleData()
            {
                GenreList.Add(new Items_stazioni() { Icitta = "Roma", Icodice = "RM" });
                GenreList.Add(new Items_stazioni() { Icitta = "Milano", Icodice = "MI" });
                GenreList.Add(new Items_stazioni() { Icitta = "Cagliari", Icodice = "CA" });
            }
    
            // legge dal file il codice della città precedentemente salvato
            private string LeggiFile_preferenze()
            {
                return "MI";
            }
            
            void Load()
            {
                LoadSampleData();
    
                var data = GenreList.OrderBy(x => x.Icitta).ToList();
    
                LPnumero_ricerche.ItemsSource = data;
    
                var codice = LeggiFile_preferenze();
    
                var item = data.FirstOrDefault(x => x.Icodice.Equals(codice));
                if (item != null)
                {
                    LPnumero_ricerche.SelectedItem = item;
                }
            }
        }

    Stefano


    sabato 23 giugno 2012 15:19
    Postatore
  • Sto provando a fare un encoding del mio testo 

    Encoding iso, utf8;
    iso = Encoding.GetEncoding("ISO-8859-1");
    utf8 = Encoding.UTF8;
    
    dati2[0] = utf8.GetString(iso.GetBytes(dati2[0]));

    però mi dice: 

    Errore	1	'System.Text.Encoding.GetString(byte[])' è inaccessibile a causa del livello di protezione	C:\Users\Mattia\Documents\Visual Studio 2010\Projects\p1\p1\settings.xaml.cs	202	44	p1

    Ti conviene impostare la giusta codifica prima di scaricare i tuoi dati:

               var wb = new WebClient();
                wb.Encoding = Encoding.GetEncoding("ISO-8859-1");
                wb.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wb_DownloadStringCompleted);
                wb.DownloadStringAsync(new Uri("http://"));


    sabato 23 giugno 2012 16:03
    Postatore
  • Sto provando a fare un encoding del mio testo 

    Encoding iso, utf8;
    iso = Encoding.GetEncoding("ISO-8859-1");
    utf8 = Encoding.UTF8;
    
    dati2[0] = utf8.GetString(iso.GetBytes(dati2[0]));

    però mi dice: 

    Errore	1	'System.Text.Encoding.GetString(byte[])' è inaccessibile a causa del livello di protezione	C:\Users\Mattia\Documents\Visual Studio 2010\Projects\p1\p1\settings.xaml.cs	202	44	p1

    Ti conviene impostare la giusta codifica prima di scaricare i tuoi dati:

               var wb = new WebClient();
                wb.Encoding = Encoding.GetEncoding("ISO-8859-1");
                wb.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wb_DownloadStringCompleted);
                wb.DownloadStringAsync(new Uri("http://"));


    ok, almeno la codifica sono riuscito a farla :) Grazie!!!

    Ora quando voglio vedere il valore dell'elemento del listpicker selezionato...come faccio?

    io ho provato:

    temp = LPnumero_ricerche.SelectedItem.ToString();
    ma non mi ritorna il nome dell'elemento selezionato....

    giovedì 28 giugno 2012 08:41
  • Ciao,

    SelectedItem è un oggetto della tua collezione e non una "semplice" stringa, devi quindi convertirlo:

    var item = LPnumero_ricerche.SelectedItem as TuoOggetto;
    
    if(item!=null)
       MessageBox.Show(item.XXXX);

    Nell'esempio di prima in pratica devi fare così:

    var item = LPnumero_ricerche.SelectedItem as Items_stazioni; if(item!=null) MessageBox.Show(item.Icitta);

    Stefano

    • Contrassegnato come risposta Ronca giovedì 28 giugno 2012 13:04
    giovedì 28 giugno 2012 09:30
    Postatore
  • sempre utilissime e precise le tue risposte!!! Grazie! :)
    giovedì 28 giugno 2012 13:05