Wedvich Skrevet 6. april 2011 Del Skrevet 6. april 2011 (endret) Heisann! Jeg holder på med et lite program som parser en loggfil, og prøver i den forbindelse å bruke App.config til å lagre innstillinger som f.eks. path til selve loggfilen. Jeg vil gjerne at dette skal kunne endres direkte i programmet også, så jeg tenkte å bruke databinding på en tekstboks til å se/endre denne verdien. Det er første gang jeg prøver noe slikt så jeg måtte ta Google til hjelp, og fant etterhvert ut at man ikke kan binde direkte til App.config. Laget derfor en wrapper-klasse hvor jeg kan lese til og skrive fra App.config gjennom properties der. Strukturen på App.config: <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add Key="LogPath" value="C:\eksempel\eksempel\logg.txt" /> </appSettings> </configuration> Wrapper-klasse for å binde til App.config: public class ConfigWrapper : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } public string LogPath { get { return ConfigurationManager.AppSettings["LogPath"]; } set { ConfigurationManager.AppSettings["LogPath"] = value; } } } I konstruktøren til MainWindow (ja, ConfigWrapper config er selvfølgelig satt i klassen): config = new ConfigWrapper(); this.DataContext = config; XAML i MainWindow: <TextBox Text="{Binding Path=LogPath, UpdateSourceTrigger=PropertyChanged}" /> Jeg tar forbehold om skrivefeil her, da jeg har skrevet dette etter hukommelsen på jobben. Jeg vet at at det ikke er syntaksfeil i den ordentlige koden jeg har hjemme. Uansett, dette fungerer... halvveis. Når jeg starter programmet, får TextBoxen den verdien som står i config-filen (f.ek.s Parser.exe.config). Men utover det skjer det lite Tekstboksen oppdaterer seg ikke dersom config.LogPath endres via kode Endringer til config.LogPath, enten det gjøres gjennom tekstboksen eller i kode, lagres ikke i config-filen Hva er grunnen til dette? Hvordan burde det eventuelt gjøres annerledes? Dette er som sagt første gang jeg prøver meg på noe slikt, så dersom det er en helt åpenbar feil beklager jeg. Men nå har jeg letet en god del både på Google og Stackoverflow uten å finne en relevant løsning, så jeg må bare spørre. Endret 10. april 2011 av Wedvich Lenke til kommentar
Nuduaa Skrevet 9. april 2011 Del Skrevet 9. april 2011 Hvis du vil at app.config skal lagres så må du kalle Save(), gjøres gjerne når du avslutter programmet. Properties.Settings.Default.Save(); Og du må huske å raise PropertiesChanged for at two-way bindings skal fungere: set { if (value != (string)Properties.Settings.Default["LogFile"]) { Properties.Settings.Default["LogFile"] = value; NotifyPropertyChanged("LogFile"); } } Lenke til kommentar
Wedvich Skrevet 10. april 2011 Forfatter Del Skrevet 10. april 2011 Fungerte strålende dette her, takker Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå