O que é uma propriedade de dependência no .Net (especialmente no contexto do WPF). Qual é a diferença da propriedade regular?
136
O que é uma propriedade de dependência no .Net (especialmente no contexto do WPF). Qual é a diferença da propriedade regular?
Propriedades de dependência são propriedades de classes derivadas de DependencyObject, e são especiais porque, em vez de simplesmente usar um campo de suporte para armazenar seu valor, elas usam alguns métodos auxiliares no DependencyObject.
O melhor de tudo é que eles têm todo o encanamento para ligação de dados incorporado. Se você vincular algo a eles, eles notificarão quando mudarem.
A única explicação que achei útil e bem escrita é esta: http://www.wpftutorial.net/dependencyproperties.html
Basicamente, DependencyProperties diferem das propriedades regulares, pois não são apenas setters / getters para campos da classe, mas recuperam seus valores reais dinamicamente durante o tempo de execução. O
SetValue()
método dos PDs é bastante direto e define o valor local da propriedade com o valor que você forneceu. No entanto, ao tentarGetValue()
partir de um DependencyProperty, ele primeiro procurará um valor local, se nenhum estiver presente (o que é viável nas DependencyProperties, ao contrário das propriedades regulares), continuará na árvore lógica da interface do usuário até encontrar esse valor. Se a estrutura alcançou o topo da árvore sem encontrar nenhum valor local, ela usará um valor padrão predefinido como o valor da propriedade.Esse método permite que DependencyProperties consuma menos memória que as propriedades regulares, pois apenas os valores que foram explicitamente definidos pelo usuário serão armazenados localmente.
E, como mencionado acima, o DependencyProperties também nos permite vincular a eles no código XAML e definir gatilhos neles, o que em propriedades regulares não é permitido.
Espero ter conseguido limpar um pouco da imprecisão :)
fonte
Grid.Row="1"
em aButton
definirá a Linha 2 no paiGrid
(devido ao fato de que as linhas são baseadas em zero), mas oRow
DependencyProperty pertence aoGrid
objeto.DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed
, você quis dizer que a ligação em XAML e a configuração de gatilhos ou apenas a configuração de gatilhos não são permitidas. Agradeço pelo acompanhamento e por ajudar a tornar as coisas mais claras!Value
propriedade (Não DP) com o valor 0 e você quiser que o seu objectivo de fazer alguma coisa quandoValue
muda para 1. Você vai ser capaz de fazê-lo usandoDataTrigger
e definindo oBinding={Binding Path=Value, Value=1}
http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ fornece uma boa explicação das propriedades da dependência, tanto no contexto do WF quanto do WPF.
Um trecho:
fonte