Доступ к значениям App.Config в WPF

Автор: Диптимайя Патра (Diptimaya Patra)

В этой статье будет показано, как можно получить доступ к значению в файле App.Config в приложении WPF.

Создание проекта приложения WPF

Запустите Visual Studio 2008, создайте приложение WPF и дайте проекту имя ReadWriteConfig.

Теперь добавьте файл конфигурации и назовите его App.config.

После добавления файла необходимо добавить следующую структуру xml.

<configuration>
  <appSettings>
  </appSettings>
</configuration>

Теперь добавим в наше приложение несколько элементов управления, таких как TextBox для значения и Button для добавления или обновления значения с помощью ключа.

Как можно видеть на приведенном выше рисунке, элемент управления TextBox будет содержать введенное пользователем значение, и когда пользователь нажмет на кнопку "Save Value", то значение будет создано, если оно не существует, или обновлено, если существует.

В первую очередь необходимо позаботиться о сборках, которые планируется использовать в приложении.

Как можно видеть на приведенном выше рисунке, необходимо добавить ссылку на сборку System.configuration. Обратите внимание, что она не добавляется по умолчанию при создании приложения. Теперь добавим Key для установки value="".

<configuration>
  <appSettings>
    <add key="UserName" value="" />
  </appSettings>
</configuration>

Нам необходимо добавить значение в Key с помощью значения TextBox.

Поэтому в событии нажатия кнопки напишем следующий код.

private void btnUpdate_Click(object sender, RoutedEventArgs e)
        {
            UpdateKey("UserName", txtName.Text);
            txtName.Text = string.Empty;
        }
        public void UpdateKey(string strKey, string newValue)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "..\\..\\App.config");
            if (!KeyExists(strKey))
            {
                throw new ArgumentNullException("Key", "<" + strKey + "> does not exist in the configuration. Update failed.");
            }
            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 + "..\\..\\App.config");
            xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
        }
        public bool KeyExists(string strKey)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "..\\..\\App.config");
            XmlNode appSettingsNode = xmlDoc.SelectSingleNode("configuration/appSettings");
            foreach (XmlNode childNode in appSettingsNode)
            {
                if (childNode.Attributes["key"].Value == strKey)
                    return true;
            }
            return false;
        }

Но как нам узнать, что произошло изменение appSetting. Поэтому при загрузке окна атрибут Title будет изменяться в соответствии с сохраненным значением.

public Window1()
        {
            InitializeComponent();
            if (!string.IsNullOrEmpty(ConfigurationSettings.AppSettings["UserName"]))
            {
                this.Title = ConfigurationSettings.AppSettings["UserName"];
            }
        }

Теперь запустим приложение и посмотрим на поле заголовка. Если оно отображает Window1, то значение ключа пустое.

Теперь обновим его, введя какое-либо значение, и запустим приложение снова.

Это все. Мы получили то, что хотели.

Надеюсь, эта статья будет полезной.