n° 219
Novembre 2017
Dicembre 17, 2017, 11:59:43 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Valore di "public Property" su inizializzazione controllo  (Letto 3834 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« inserita:: Ottobre 05, 2010, 06:49:54 »

Ho un user control che non fa altro che gestire una lista di voci su cui effettuare una selezione.

Al controllo ho dato questa proprietà:
Codice:
public bool Multiselect { get; set; }
In base al valore di questa verranno creati tanti CheckBox o tanti RadioButton corrispondenti al numero di voci appartenenti alla lista.

Premesso che non voglio gestire la costruzione del controllo sul set della proprietà, non so dove/quando andare a gestire questa inizializzazione in modo tale che la proprietà "MultiSelect" sia già valorizzata.

Infatti con la seguente sintassi di utilizzo e di creazione del controllo:
Codice:
<controls:XXXSelector x:Name="ruotaSelector" Multiselect="True"></controls:XXXSelector>

/// ctor
        public XXXSelector()
        {
            InitializeComponent();

            CreateChildren();
        }

        private void CreateChildren()
        {
           
            foreach (XXX xxx in XXXList.GetAll())
            {
                ToggleButton control;
                if (Multiselect)
                    control = new CheckBox();
                else
                    control = new RadioButton();
                control.Content = xxx.Name;
                control.Tag = xxx.Id;
                myPanel.Children.Add(control);
            }

            if (!Multiselect)
                (myPanel.Children[0] as ToggleButton).IsChecked = true;                   

        }


il valore di MultiSelect non è stato ancora settato (vale False).
Ho provato anche nell'evento EndInit ma con lo stesso risultato.

Come dovrei fare?

Grazie
Alessandro


Registrato
castagna
Utente non iscritto
« Risposta #1 inserita:: Marzo 02, 2011, 03:05:44 »

Prova così:

public bool Multiselect {
   get { return m_Multiselect; }
   set { m_Multiselect = value; }
}
private bool m_Multiselect = false;
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #2 inserita:: Marzo 03, 2011, 01:27:35 »

E cosa dovrebbe cambiare?
Hai davvero capito l'ambito ed il problema?
Sai cosa sono le "automatic properties", perchè mi suggerisci di non usarle?

... nel dubbio ...
http://csharp.net-tutorials.com/csharp-3.0/automatic-properties/
http://www.rvenables.com/tag/automatic-properties/

Per quanto riguarda il problema segnalato probabilmente avevo preso un abbaglio, ovvero il problema era un altro o di diversa natura, sinceramente non lo ricordo.

Infatti non so quali modifiche ho apportato ma al momento il problema non si presenta più.
Anche se non viene settato l'attributo al controllo in-line (e nemmeno nel code-behind), interrogando la proprietà vedo che questa vale "false".
Cioè funziona anche se dal codice
Codice:
<controls:RuotaSelector Grid.Row="0" Grid.Column="1" x:Name="ruotaSelector" MultiSelect="True" CompactVisualization="True"></controls:RuotaSelector>
elimino il MultiSelect="True".

Stranamente in debug posizionandomi sulla proprietà mi dice "Il nome 'MultiSelect' non è presente nel contesto" ma con il "Watch" ne vedo il valore di default, cioè False. E viene anche valutata senza problemi.

Ciao

Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines