2010-07-30 16 views
7

E 'possibile bind a property to an existing application setting using the designer, in questo modo non ho per scrivere qualcosa di simileaggiornare automaticamente l'impostazione Applicazione che utilizza l'associazione dal VS.Net Designer

textBox.Text = Settings.Default.Name; 

durante l'inizializzazione mia forma.

Ora sembra che il binding si fermi qui, cioè se cambio il valore della mia impostazione, non aggiornerà il valore nella mia casella di testo e viceversa.

È normale o mi manca qualcosa?

risposta

11

Spiegherò come lo faccio su Windows Form con Visual Studio 2010. È probabile che sia simile nelle versioni più recenti.

  1. Clicca sul componente da legarsi (testo, checkbox, ...)
  2. Marchio pannello delle proprietà del componente visibile
  3. Espandere il nodo ApplicationSettings
  4. Fare clic sul pulsante ... alla destra di (PropertyBinding)

    Get application settings for component

  5. Scegli chi impostazione ch volete al controllo vincolato a.

c'è un tutorial più dettagliato a Exploring Secrets of Persistent Application Settings

+1

Come si salva, ho scoperto che se aggiorno la casella di testo e chiudo la mia app quando la riapre, il vecchio valore è ancora lì? – Zapnologica

+1

Ho verificato che chiudendo l'app utilizzando il pulsante Stop Debug le impostazioni dell'utente non vengano salvate. Dovresti chiudere l'app correttamente (tasto croce rossa). –

+0

C'è qualche codice che posso chiamare manualmente per mantenere le impostazioni? Ad esempio sul testo Changed listener? o ogni 10 secondi? – Zapnologica

1

Beh, dipende.

In primo luogo, non sono sicuro che tu stia parlando di WPF o Windows Form, quindi non assumerò nessuna delle due.

In secondo luogo, non si "lega" nulla. Si sta prendendo il valore di Name e si imposta la proprietà Text uguale a questo valore. Stai impostando una proprietà. Questo non ha effetti collaterali magici che collegano in modo inestricabile la proprietà Name alla proprietà Text.

In terzo luogo, è possibile modificare le impostazioni, ma fino a quando non vengono salvate, non vengono riscritte nel proprio app.config. In un Windows Form app, che avrebbe dovuto fare qualcosa di simile:

// event handler for the Form.Closed event. 
// this.FormClosed += FormClosed; 
void FormClosed(object sender, FormClosedEventArgs e) 
{ 
    Settings.Default.Name = textBox.Text; 
    Settings.Default.Save(); 
} 

In WPF, utilizza i normali semantiche vincolanti (il che significa che si evita il fastidio di impostare tutti i valori delle proprietà in chiusura) , ma è comunque necessario intercettare la chiusura del modulo in modo da consentire a di salvare() le impostazioni.

Binding:

<TextBox 
    xmlns:lol="clr-namespace:MyApplication.Settings" 
    Text="{Binding Name, Source={x:Static lol:Default}}" /> 

La chiamata Save() avviene più con l'esempio forme, ma non si deve fare altro che chiamare Save().

+0

C'è un malinteso. Non sto * scrivendo "textBox.Text = Settings.Default.Name;" grazie alla rilegatura (vedi link). So che se voglio che le modifiche vengano salvate nel file delle impostazioni, devo chiamare specificamente "Settings.Default.Save();". – user276648

Problemi correlati