WPF: Como fazer o bind às preferências de uma aplicação

É fácil usar um ficheiro de settings numa aplicação WPF para guardar as preferências do utilizador. Depois é possível fazer o bind dessas preferências a controlos XAML.

Vamos supor que querem guardar o título de uma janela nas preferências. Criam uma propriedade MainWindowTitle e depois fazem o bind ao controlo XAML da seguinte maneira:

<Window
    x:Class="MyApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:myapp="clr-namespace:MyApplication"
    xmlns:properties="clr-namespace:MyApplication.Properties"
    Title="{Binding Source={x:Static properties:Settings.Default}, Path=MainWindowTitle, Mode=TwoWay}">
</Window>

Bastante simples, certo? Excepto que é muito palavroso. É possível ser mais sucinto criando uma extensão markup da seguinte forma:

using System.Windows.Data;

namespace MyApplication
{
    public class SettingBindingExtension : Binding
    {
        public SettingBindingExtension()
        {
            Initialize();
        }
  
        public SettingBindingExtension(string path)
            : base(path)
        {
            Initialize();
        }
  
        private void Initialize()
        {
            this.Source = Properties.Settings.Default;
            this.Mode = BindingMode.TwoWay;
        }
    }
}

E depois no vosso XAML, podem fazer o bind assim:

<Window
    x:Class="MyApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:myapp="clr-namespace:MyApplication"
    Title="{myapp:SettingBinding MainWindowTitle}">
</Window>

Sintaxe mais curta, facilita a leitura e a manutenção.

Nuno Freitas
Publicado por Nuno Freitas em 16 janeiro, 2014

Artigos relacionados