Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    22

    Applicazione WPF Visual c#

    Ciao a tutti,

    sono un vecchio programmatore C++, ho lasciato per un periodo ed ora riinizio ad affacciarmi al codice con il VISUAL C#.
    -------------------------------------------------------------------------------------
    Ho ideato una grafica basandomi su codice .xaml ed ho creato quindi la seguente struttura logica per il mio programma:

    -MainWindow.xaml
    -Page1.xaml
    -Page2.xaml
    -Page2.xaml
    -Page3.xaml
    -Page4.xaml

    (chiaramente in visual studio ogni elemento avrà il suo .cs)

    All'interno della mia MainWindow, ho posizionato una listbox (che resta fissa sulla sinistra) all'interno della quale carico dei nomi di categorie e un frame a far si che ogni volta che si clicchi su una categoria, invece di caricare una nuova window per quella categoria , io possa caricare solo una determinata page all'interno del frame.


    Illustro le parti di codice che ho implementato nella MainWindows.xaml.cs:

    codice:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Shapes;
    
    namespace Application
    {
    
    	public partial class MainWindow : Window
    	{
    
            Page1 primapagina= new Page1();
            Page2 secondapgina= new Page2();
            Page3 terzapagina= new Page3();
            Page4 quartapagina= new Page4();
    
    
    		public MainWindow()
    		{
    			this.InitializeComponent();
          
    		}
    
    
            // carico la primapagina di default all'avvio della window
            private void Window_Loaded(object sender, RoutedEventArgs e)
            { 
                
                //carico la "primapagina" all'interno del frame nella mainwindow
                frame1.NavigationService.Navigate(primapagina);
               
    
               //popolo la listbox con i nome delle pagine 
                listbox.Items.Add("primapagina");
                listbox.Items.Add("secondapagina");
                listbox.Items.Add("terzapagina");
                listbox.Items.Add("quartapagina");
                
                
    
            }
    
           
           
           //funzione per il click sul contenuto della listbox
    
            private void category_SelectedIndexChanged(object sender, System.EventArgs e)
            {
              
             
             //acquisisco il testo dell'item che clicco nella listbox (ad esempio "secondapagina")
                string item = listbox.SelectedItem.ToString();
             
               //cerco di caricare la pagina (ad esempio appunto "secondapagina")
                frame1.NavigationService.Navigate(item);    
    
            }
    
    	}

    Arrivato al punto di dover caricare dinamicamente (a seconda del click nella listbox) una page nel frame, mi accorgo che funziona solo nel caso:

    codice:
    frame1.NavigationService.Navigate(primapagina);
    dove "primapagina" era stato dichiarato:

    codice:
     Page1 primapagina= new Page1();
    e non funziona se:
    codice:
     //acquisisco il testo dell'item che clicco nella listbox (ad esempio "secondapagina")
                string item = listbox.SelectedItem.ToString();
             
     //cerco di caricare la pagina (ad esempio appunto "secondapagina")
                frame1.NavigationService.Navigate(item);


    Come faccio a fargli prendere quell ITEM come il nome dell'oggetto (primapagina o secondapagina etc...)???
    E' come se prendesse item come un nome a caso o una semplice stringa che pesca dalla listbox senza riferirsi al nome della page che ho dichiarato.
    Spero di essere stato abbastanza esplicativo!

    Vi prego datemi una mano, sto impazzendo per una cosa che secondo me è semplice ma alla quale davvero non riesco a dare una soluzione!
    Grazie mille!

  2. #2
    Il metodo Navigate vuole un riferimento all'oggetto a cui spostarsi, mentre primapagina, secondapagina eccetera sono nomi di variabili (ovvero, riferimenti a oggetti di tipo Page1 ... Page4). Come fa Navigate a sapere come hai chiamato nel tuo codice quegli oggetti?

    Per risolvere, puoi memorizzare le varie pagine, invece che come variabili sparse, in un container associativo (ad esempio in un Dictionary<string, Page>), in cui puoi cercare a runtime i vari oggetti che ci hai memorizzato in base al nome assegnato.
    (si potrebbe fare anche con "variabili sparse" via reflection, ma è inutilmente più complicato)
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    22
    Grazie mille MItaly, il tuo consiglio mi è stato di fondamentale importanza!
    Adesso dopo essermi documentato sull'MSDN riguardo le Dictionary, ho implementato una soluzione perfettamente funzionante!

    A presto =)

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.