20 messaggi dal 06 settembre 2014
Ho una classe con varie proprietà, ho creato vari oggetti in un alista e visualizzo la lista in un controllo Pivot, con una ListView.
Vorrei che selezionando un elemento della ListView,si aprisse una nuova pagina con uno nuovo Pivot,e l'Header del Pivot vorrei che avesse il nome di una delle proprietà dell'oggetto selezionato precedentemente. Come posso fare?
37 messaggi dal 16 giugno 2011
Contributi
Ciao,

per darti maggiori spiegazioni avrei bisogno di capire che tipo di app stai sviluppando (8.0, 8.1 Silverlight o XAML, con pattern MVVM oppure no)...

In ogni caso cerco di spiegarmi, poi non avrai il codice a disposizione ma li saprai tu cosa fare.

Prima di tutto devi passare alla pagina successiva il parametro selezionato, quindi dalla ListView ti registri al metodo SelectionChanged che ti permette di recuperare l'item.

Una volta fatto questo, ci sono diverse possibilità e dipendono da come stai scrivendo l'app: potresti riuscire a passare tutto l'oggetto all'altra pagina, oppure solo un parametro più semplice, come una stringa. Se hai una lista di oggetti, è più probabile che tu abbia a disposizione un Id identificativo dell'oggetto, così tu puoi passare alla pagina successiva solo quello e volendo ti puoi recuperare tutto l'oggetto ricaricando la lista. Siccome a te interessa solo una proprietà nella pagina successiva, direi che è il caso che fa per te. Se invece hai bisogno di passare tutto l'oggetto, puoi farlo in diversi modi con il metodo dei messaggi se stai usando Caliburn per MVVM, oppure direttamente con una classe Singleton se vai di code behind.

Quando sei nella nuova pagina avrai il dato che dovrai solo agganciare all'header del pivot. Anche questa volta dipende come stai sviluppando, se sei in ambito MVVM allora ti basta andare di binding, altrimenti da code behind referenzi il pivot con il suo nome ed assegni la proprietà Header con il parametro che hai appena ricevuto dalla pagina precedente attraverso l'onNavigatedTo.
20 messaggi dal 06 settembre 2014
Mi ero dimenticato di dirti che sto facendo un app 8.1
Non uso il pattern MVVM,credo..ti credo credo perché ancora non ho ben capito cosa sia, sono proprio agli inizi della programmazione, è da poco sto studiando il tutto.
Quindi ricapitolando: Creo il SelectionChanged ( e ho provato a fare cosi):
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var elemSelect = (Regioni)e.AddedItems;
        }

Non so se è giusto.
Poi mi sono completamente perso perché ti spiego. Se ho quel metodo e recupero l'oggetto internamente, come faccio ad utilizzarlo esternamente nella nuova pagina?
37 messaggi dal 16 giugno 2011
Contributi
Ti incollo quanto scritto sopra:
Se hai una lista di oggetti, è più probabile che tu abbia a disposizione un Id identificativo dell'oggetto, così tu puoi passare alla pagina successiva solo quello e volendo ti puoi recuperare tutto l'oggetto ricaricando la lista.


Immagino quindi che l'oggetto elemSelect che hai recuperato abbia una struttura tipo questa:

public class Region
{
    public int id {get; set;}
    public string RegionName {get; set;}
    //Altre proprietà....
}


Io passerei semplicemente alla nuova pagina l'id (o comunque una proprietà che renda quell'elemento selezionato univoco) con una istruzione tipo questa (se stai usando 8.1 XAML):

Frame.Navigate(typeof(SecondPage), param);


Oppure questa se stai usando 8.1 Silverlight:

NavigationService.Navigate(new Uri("/SecondPage.xaml?id=" + regionId, UriKind.Relative));


In base a quello che stai creando, puoi recuperare l'identificativo nell'altra pagina direttamente nel metodo OnNavigatedTo:

int id = e.Parameter as int;


Oppure, sempre dal metodo OnNavigatedto:

int id = -1;
NavigationContext.QueryString.TryGetValue("id", out id))


Una volta che hai l'id con una semplice query di linq puoi tirare fuori la region selezionata in precedenza:

var selectedRegion = regions.FirstOrDefault(x => x.Id == id);


Non ho usato Visual Studio per scrivere il codice, quindi non sono certo che sia corretto al 100%, soprattutto come sintassi ma la logica è questa.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.