In this article, I am going to show how we can update a key value in app.config file in WPF. For this add reference of System.Configuration in your application.

Suppose we have a key in our app.config file like this:

AppConfigKey1.JPG

Image 1.

At run time we will change "Country" Key Value.

This is my XAML code

<Window x:Class="UpdateAppConfigValueInWPF.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Height="350" Width="525" Title="Update App.config value in WPF">

<Grid>

<Button Content="Update" Click="Button_Click" Height="20" Width="70" Margin="205,77,228,214"></Button>

<TextBox Height="23" HorizontalAlignment="Left" Margin="184,34,0,0" Name="textBoxCountry" VerticalAlignment="Top" Width="120" />

<TextBlock Height="23" HorizontalAlignment="Left" Margin="79,34,0,0" Name="textBlock1" Text="New Value for Key" VerticalAlignment="Top" Width="99" />

</Grid>

</Window>

This is my XAML.CS code

using System;

using System.Collections.Generic;

using System.Linq;

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.Navigation;

using System.Windows.Shapes;

using System.Configuration;

using System.Xml;

namespace UpdateAppConfigValueInWPF

{

/// <summary>

/// Interaction logic for MainWindow.xaml

/// </summary>

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private void Button_Click(object sender, RoutedEventArgs e)

{

if (!string.IsNullOrEmpty(textBoxCountry.Text))

{

UpdateConfigKey("Country", textBoxCountry.Text);

textBoxCountry.Text = string.Empty;

}

else

MessageBox.Show("Please type some value.");

}

public void UpdateConfigKey(string strKey, string newValue)

{

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "..\\..\\App1.config");

if (!ConfigKeyExists(strKey))

{

throw new ArgumentNullException("Key", "<" + strKey + "> not find in the configuration.");

}

XmlNode appSettingsNode = xmlDoc.SelectSingleNode("configuration/appSettings");

foreach (XmlNode childNode in appSettingsNode)

{

if (childNode.Attributes["key"].Value == strKey)

childNode.Attributes["value"].Value = newValue;

}

xmlDoc.Save(AppDomain.CurrentDomain.BaseDirectory + "..\\..\\App1.config");

xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

MessageBox.Show("Key Upated Successfullly");

}

public bool ConfigKeyExists(string strKey)

{

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "..\\..\\App1.config");

XmlNode appSettingsNode = xmlDoc.SelectSingleNode("configuration/appSettings");

foreach (XmlNode childNode in appSettingsNode)

{

if (childNode.Attributes["key"].Value == strKey)

return true;

}

return false;

}

}

}

When I run the application it will ask for new value of key as shown below:

UpdateAppConfigKey.JPG

Image 2.

Now if we see App.config key then it is already been updated.

AppConfigKey2.JPG

Image 3.