Gå til innhold

Anbefalte innlegg

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 av Wedvich
Lenke til kommentar
Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...