none
Navigazione tra pagine WPF RRS feed

  • Domanda

  • Ciao a tutti, sto facendo un progetto WPF in cui navigo (in avanti e indietro) tra varie pagine tramite un menu (che ora chiamerò menu). In una di queste pagine (che ora chiamerò pag1) apro una seriale e leggo.
    Quando da pag1 torno al menu e dopodiché rientro in pag1 ho però dei problemi con la lettura della seriale. La seriale di questa pag1 mi legge infatti l'ultimo messaggio presente sulla seriale della prima pag1 creata andando a sballarmi tutto.

    Il codice in menu.xaml.cs per passare da menu a pag1 è questo:
    pag1 p = new pag1();
    this. NavigationService.Navigate(p);

    Il codice in pag1.xaml.cs per tornare al menu è questo:
    menu m = new menu();
    this.NavigationService.Navigation(m);
    Sapete come aiutarmi?? Grazie in anticipo..
    • Spostato Marco MinervaMVP lunedì 9 febbraio 2015 15:24 Messaggio spostato sul forum più adeguato perché la domanda riguarda WPF
    venerdì 30 gennaio 2015 15:27

Risposte

  • Ciao Laberra8,
    non so tutto il tuo contesto, ma un esempio di come potresti risolvere questo problema
    potrebbe essere quello di utilizzare un parametro.
    In pag1 potresti ad esempio aprire la seriale e leggere il valore solo quando la stessa pagina non viene caricata senza
    parametro. Per far ciò devi utilizzare un costruttore della pagina che accetti un parametro.
    Faccio un esempio per esprimermi meglio.

    public partial class Page1 : Page
        {
            string valueFromPage;
            public Page1()
            {
                InitializeComponent();
            }
            public Page1(string val):this()
            {
                valueFromPage = val;
                this.Loaded += new RoutedEventHandler(Page1_Loaded);
        
            }
            void Page1_Loaded(object sender, RoutedEventArgs e)
            {
                lbl.Content = "Il valore passato dal menù è: " + valueFromPage;
            }
        }
    Così puoi fare in modo di leggere dalla seriale solo quando la variabile valueFromPage è null.
    Ovviamente per aprire pag1 con il valore letto precedentemente devi passare il valore della variabile valueFromPage
    anche al Menu1 in modo che quando dal menu1 ritorni in pag1 questo trasferisce anche il valore della variabile valueFromPage.
    Tipo ad esempio così:

    if (string.IsNullOrEmpty(valueFromPage)) {

    // questo avviene al primo caricamento Page1 p = new Page1(); this.NavigationService.Navigate(p); } else {

    // questo avviene quando ritorni in pag1 Page1 p = new Page1(valueFromPage); this.NavigationService.Navigate(p); }


    Spero così di averti dato almeno un suggerimento per risolvere il tuo problema.
    Tienici aggiornati,

    ciao

    Paolo Pranzo


    Scusa se ti rispondo solo ora.. Cmq ho risolto il problema inserendo nella funzione per "uscire" da una pagina ed entrare in un'altra il comando
    Globals.seriale.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);

    Ovviamente nel costruttore di ogni pagina facevo
    Globals.seriale.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);

    lunedì 23 febbraio 2015 17:04

Tutte le risposte

  • Ciao Laberra8,
    non so tutto il tuo contesto, ma un esempio di come potresti risolvere questo problema
    potrebbe essere quello di utilizzare un parametro.
    In pag1 potresti ad esempio aprire la seriale e leggere il valore solo quando la stessa pagina non viene caricata senza
    parametro. Per far ciò devi utilizzare un costruttore della pagina che accetti un parametro.
    Faccio un esempio per esprimermi meglio.

    public partial class Page1 : Page
        {
            string valueFromPage;
            public Page1()
            {
                InitializeComponent();
            }
            public Page1(string val):this()
            {
                valueFromPage = val;
                this.Loaded += new RoutedEventHandler(Page1_Loaded);
        
            }
            void Page1_Loaded(object sender, RoutedEventArgs e)
            {
                lbl.Content = "Il valore passato dal menù è: " + valueFromPage;
            }
        }
    Così puoi fare in modo di leggere dalla seriale solo quando la variabile valueFromPage è null.
    Ovviamente per aprire pag1 con il valore letto precedentemente devi passare il valore della variabile valueFromPage
    anche al Menu1 in modo che quando dal menu1 ritorni in pag1 questo trasferisce anche il valore della variabile valueFromPage.
    Tipo ad esempio così:

    if (string.IsNullOrEmpty(valueFromPage)) {

    // questo avviene al primo caricamento Page1 p = new Page1(); this.NavigationService.Navigate(p); } else {

    // questo avviene quando ritorni in pag1 Page1 p = new Page1(valueFromPage); this.NavigationService.Navigate(p); }


    Spero così di averti dato almeno un suggerimento per risolvere il tuo problema.
    Tienici aggiornati,

    ciao

    Paolo Pranzo


    domenica 1 febbraio 2015 19:17
  • Ciao Laberra8,
    non so tutto il tuo contesto, ma un esempio di come potresti risolvere questo problema
    potrebbe essere quello di utilizzare un parametro.
    In pag1 potresti ad esempio aprire la seriale e leggere il valore solo quando la stessa pagina non viene caricata senza
    parametro. Per far ciò devi utilizzare un costruttore della pagina che accetti un parametro.
    Faccio un esempio per esprimermi meglio.

    public partial class Page1 : Page
        {
            string valueFromPage;
            public Page1()
            {
                InitializeComponent();
            }
            public Page1(string val):this()
            {
                valueFromPage = val;
                this.Loaded += new RoutedEventHandler(Page1_Loaded);
        
            }
            void Page1_Loaded(object sender, RoutedEventArgs e)
            {
                lbl.Content = "Il valore passato dal menù è: " + valueFromPage;
            }
        }
    Così puoi fare in modo di leggere dalla seriale solo quando la variabile valueFromPage è null.
    Ovviamente per aprire pag1 con il valore letto precedentemente devi passare il valore della variabile valueFromPage
    anche al Menu1 in modo che quando dal menu1 ritorni in pag1 questo trasferisce anche il valore della variabile valueFromPage.
    Tipo ad esempio così:

    if (string.IsNullOrEmpty(valueFromPage)) {

    // questo avviene al primo caricamento Page1 p = new Page1(); this.NavigationService.Navigate(p); } else {

    // questo avviene quando ritorni in pag1 Page1 p = new Page1(valueFromPage); this.NavigationService.Navigate(p); }


    Spero così di averti dato almeno un suggerimento per risolvere il tuo problema.
    Tienici aggiornati,

    ciao

    Paolo Pranzo


    Scusa se ti rispondo solo ora.. Cmq ho risolto il problema inserendo nella funzione per "uscire" da una pagina ed entrare in un'altra il comando
    Globals.seriale.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);

    Ovviamente nel costruttore di ogni pagina facevo
    Globals.seriale.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);

    lunedì 23 febbraio 2015 17:04