Passando i dati di una determinata pagina a un'altra pagina. Windows Phone 7

0

L'utente inserirà le informazioni nella pagina 1 ei dati verranno visualizzati nell'altra pagina elencata in una casella di riepilogo.

È consigliabile utilizzare l'associazione dati?

Ho studiato / ricercato sull'associazione dati già da circa 2 giorni e ancora non sono riuscito a capirlo.

Un semplice esempio sarebbe di grande aiuto.

    
posta kai 21.08.2012 - 05:40
fonte

3 risposte

1

Come avrai capito, le pagine sono senza stato in wp7, il che significa che ogni volta che vai da una pagina all'altra, lo stato (variabili, oggetti, ecc.) della tua pagina precedente va perso.

Una rapida ricerca su Google mi ha fornito questo ottimo articolo del blog , e questo slide show (vedi pagina 21 a 23, questo è la seconda soluzione che elenchiamo di seguito).

In breve, l'autore descrive quattro soluzioni per passare i dati tra le pagine:

  1. Utilizzo di una variabile globale
  2. Utilizzo della stringa di query
  3. Uso degli stati PhoneApplicationSerivce
  4. Utilizzo dell'istanza di NextPage

Che cosa dovresti usare? Ecco il mio consiglio per ogni soluzione:

  1. A meno che i dati non siano condivisi tra tutte le pagine del tuo applicazione, ti suggerisco di dimenticare la Global Variable soluzione, non lo è molto pulito. E anche allora, preferisci la soluzione 3.
  2. La soluzione Stringa di query è appropriata se vuoi passare dati semplici tra le tue pagine, come stringhe, valori aritmetici, booleani, ecc.
  3. Informazioni sullo Stato PhoneApplicationService , non ho mai avuto bisogno di usarlo personalmente ma sembra più pulito rispetto all'utilizzo di una variabile globale. Se vuoi condividere qualche variabile / oggetto tra tutte le tue pagine, questa è la strada da percorrere.
  4. La soluzione NextPage è quella che dovresti usare se vuoi passare oggetti complessi tra due pagine. È la soluzione che ho usato di più perché non avevo bisogno di passare i dati a tutte le mie pagine.

Indipendentemente dalla soluzione scelta, nella seconda pagina che dovrebbe visualizzare i dati provenienti dalla prima pagina, non avrai problemi a caricare i dati.

Infine, ecco un link a una rapida applicazione tutorial in cui i dati vengono passati da una pagina all'altra.

    
risposta data 21.08.2012 - 10:46
fonte
0

Immaginiamo di avere due pagine: MainPage.xaml e SecondPage.xaml .

anche tu hai due viewModels MainViewModel.cs e SecondViewModel.cs

se utilizzi qualche framework MVVM (MVVM light ad esempio link ) puoi utilizzare ViewModelLocator o puoi scriverne uno tuo.

quindi, nell'evento OnNavigatied in ogni pagina puoi eseguire questo codice:

var viewModel = ViewModelLocator.MainViewModel;
this.DataContext = viewModel;

Inoltre puoi fare in un xaml. Guarda l'esempio qui: link

È possibile iniettare un fornitore di dati per ogni modello di vista. Pertanto, quando l'utente aggiunge i dati su MainPage , MainViewModel salva i dati nel fornitore di dati (che conserva i dati in una memoria o li salva nell'archivio isolato).

Quindi, quando si naviga su SecondPage, SecondViewModel riceve un dato da dataProvider .

ViewModelLocator dovrebbe essere responcible per i modelli Main e Second view ha la stessa DataProvider instance.

Se è necessario passare qualsiasi flag (sono stati aggiornati i dati, Id, ect) è possibile farlo passandolo in una stringa di query. ( link )

Questa variante è buona perché la tua app può essere tosta ( collegamento ) dal sistema operativo in qualsiasi momento. È possibile gestire questa situazione inviando un segnale (eseguendo un comando, inviando un messaggio) a un modello di vista corrente. E salverà i dati nella memoria. Il

    
risposta data 21.08.2012 - 12:56
fonte
-1

Pagina: 1

 PhoneApplicationService.Current.State["tittle"] = QTittle;
            PhoneApplicationService.Current.State["name"] = QUsername;


        NavigationService.Navigate(new Uri("/EditMyDetails.xaml", UriKind.RelativeOrAbsolute));

Pagina: 2

 var tittle = PhoneApplicationService.Current.State["tittle"];

        var name = PhoneApplicationService.Current.State["name"];
    
risposta data 14.01.2016 - 07:41
fonte

Leggi altre domande sui tag