Propriedades, Propriedades de Dependência e Objetos de Dependência no WPF

No desenvolvimento de software, a combinação de dados e algoritmos forma a essência dos programas. Em C#, membros estáticos são usados para elementos que têm significado global para uma classe, enquanto membros de instância são específicos para cada objeto. As propriedades surgem para encapsular dados, evitando a exposição direta e permitindo controle sobre acesso e validação.

Propriedades CLR No .NET Framework, as propriedades são conhecidas como propriedades CLR. Elas atuam como um wrapper seguro para campos privados, possibilitando a modificação de valores de forma controlada. Por exemplo, considere uma classe Person onde a idade não pode ser negativa:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    private int age;
    public int Age
    {
        get { return age; }
        set
        {
            if (value >= 0)
            {
                age = value;
            }
        }
    }
}

No contexto do WPF, o Path em um Binding deve referir-se a uma propriedade CLR para garantir a notificação adequada.

Propriedades de Dependência Propriedades de dependência são um mecanismo especial que não possuem valor intrínseco, mas podem obter valores de fontes externas, como Bindings. Elas oferecem benefícios significativos, como economia de memória e suporte a recursos dinâmicos do WPF.

Objetos de Dependência Para utilizar propriedades de dependência, uma classe deve herdar de DependencyObject. Esta classe base fornece métodos como GetValue e SetValue para interagir com propriedades de depenndência. Todos os controles de interface do usuário no WPF derivam de DependencyObject, o que facilita a integração com o sistema de Binding.

Definição e Uso Uma propriedade de dependência é registrada estaticamente usando DependencyProperty.Register. A convenção de nomenclatura é concatenar o nome da propriedade com "Property". Veja um exemplo com a classe Person:

public class Person : DependencyObject
{
    public string FullName
    {
        get { return (string)GetValue(FullNameProperty); }
        set { SetValue(FullNameProperty, value); }
    }

    public static readonly DependencyProperty FullNameProperty =
        DependencyProperty.Register("FullName", typeof(string), typeof(Person));
}

Neste exemplo, FullName é uma propriedade CLR que encapsula a propriedade de dependência FullNameProperty. Isso permite que o uso da propriedade seja semelhante a uma proprieadde comum.

Vantagnes Propriedades de dependência otimizam o uso de memória, pois não alocam espaço até serem necessárias. Além disso, elas suportam notificações automáticas de mudanças de valor, mesmo sem implementar INotifyPropertyChanged. Isso simplifica a criação de interfaces reativas.

private void OnButtonClick(object sender, RoutedEventArgs e)
{
    var person = new Person();
    person.FullName = InputTextBox.Text;
    OutputTextBlock.Text = person.FullName;
}

No código acima, a propriedade de dependência armazena e recupera valores, demonstrando como ela se integra ao sistema de Binding do WPF para atualizações dinâmicas na interface.

Tags: WPF C# Dependency Property Dependency Object Data Binding

Publicado em 7-7 19:35