DependencyPropertyChangedEventArgs Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece dados para uma implementação PropertyChangedCallback que é invocada quando uma propriedade de dependência altera seu valor. Também fornece dados de evento para o evento Control.IsEnabledChanged e qualquer outro evento que use o delegado DependencyPropertyChangedEventHandler .
public ref class DependencyPropertyChangedEventArgs sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class DependencyPropertyChangedEventArgs final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class DependencyPropertyChangedEventArgs
Public NotInheritable Class DependencyPropertyChangedEventArgs
- Herança
- Atributos
Exemplos
Este exemplo mostra uma implementação PropertyChangedCallback que usa os dados do DependencyPropertyChangedEventArgs
evento. Em particular, ele usa NewValue para definir uma propriedade relacionada, que exibe o valor de DependencyProperty numérico subjacente como texto, em uma parte TextBlock de um controle composto.
private static void ValueChangedCallback(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
NumericUpDown ctl = (NumericUpDown)obj;
Int32 newValue = (Int32)args.NewValue;
// Update the TextElement to the new value.
if (ctl.TextElement != null)
{
ctl.TextElement.Text = newValue.ToString();
}
Comentários
DependencyPropertyChangedEventArgs
fornece dados para duas situações diferentes que envolvem alterações nos valores da propriedade de dependência:
- Informações de retorno de chamada situacionais, conforme usado por um PropertyChangedCallback para uma propriedade de dependência personalizada. Esse é o caso mais comum.
- Dados de evento para um evento baseado em DependencyPropertyChangedEventHandler. Isso é menos comum porque o único evento Windows Runtime que usa esse delegado é o evento Control.IsEnabledChanged. Para obter mais informações sobre como usar os dados do
DependencyPropertyChangedEventArgs
evento nesse caso, consulteDependencyPropertyChangedEventHandler
ouControl.IsEnabledChanged
.
Uma implementação PropertyChangedCallback é uma parte opcional dos metadados de propriedade que você fornece ao registrar uma propriedade de dependência. O retorno de chamada é invocado internamente pelo sistema de propriedades de dependência. Para obter mais informações sobre propriedades de dependência em geral, consulte Visão geral das propriedades de dependência personalizadas e Propriedades de dependência.
Normalmente, você define o método com acesso privado ou interno. O método deve ser estático. Como o método é estático, o parâmetro DependencyObject (d) do delegado PropertyChangedCallback é importante. Isso é o que identifica a instância específica do objeto de dependência em que a propriedade está sendo alterada. Para muitas operações, como corrigir ou coagir um valor ou alterar outro valor de propriedade calculada em resposta no mesmo objeto, você fará referência a este DependencyObject
. Normalmente, você desejará convertê-lo para o tipo de proprietário da propriedade que é alterada. O tipo de proprietário é o tipo referenciado pelo nome na chamada DependencyProperty.Register ; os metadados em que o PropertyChangedCallback
é atribuído a metadados de propriedade fazem parte dessa mesma chamada.
Esteja ciente da possibilidade de recursão. Se você alterar o valor de uma propriedade de dependência para a qual PropertyChangedCallback é invocado, ela será invocada novamente. Por exemplo, se você criou um retorno de chamada para uma Double
propriedade em que o retorno de chamada sempre dividia o valor por 2, esse retorno de chamada seria chamado recursivamente e seu aplicativo estaria em um loop infinito.
É legal ter duas ou mais propriedades de dependência diferentes que definem retornos de chamada para alterar umas às outras, mas novamente tenha cuidado para não criar uma dependência circular não intencional que não permita que os valores se estabilizem.
Um PropertyChangedCallback só será invocado se OldValue e NewValue nos dados do evento forem diferentes.
OldValue e NewValue vêm sem tipo, portanto, qualquer comparação executada provavelmente precisa de uma conversão. Muitos valores de propriedade de dependência estão usando um tipo de valor, o que significa que você dependerá dos operadores ou de outra API do tipo de valor para fazer as comparações. Essa funcionalidade geralmente está disponível na estrutura que representa um valor, como uma API de utilitário. Por exemplo, a API do utilitário específico do idioma em um valor de Espessura permite comparar Thickness
valores.
Observação
Se você estiver programando usando C++, algumas das estruturas de Windows Runtime não dão suporte a membros nondata, portanto, não ofereça suporte a operadores ou outro utilitário. Para eles, há uma classe complementar Helper
que fornece a API de comparação que o código C++ pode usar. Por exemplo, use a classe ColorHelper para comparar valores de Cor .
Usando DependencyPropertyChangedEventArgs para um evento personalizado
Um implementador de controle personalizado pode considerar o uso de DependencyPropertyChangedEventHandler como o tipo delegado se um evento personalizado for acionado como resultado de uma alteração no valor da propriedade de dependência. Você só pode disparar esse evento de dentro do contexto de um PropertyChangedCallback. Isso ocorre porque o valor que foi alterado (a propriedade, o valor antigo e o novo) deve estar no DependencyPropertyChangedEventArgs
que é relatado para o evento no nível do sistema de propriedades. Mas não há construtores para DependencyPropertyChangedEventArgs
e nenhuma de suas propriedades é configurável, portanto, a única maneira de obter um DependencyPropertyChangedEventArgs
valor é obtê-lo dos parâmetros originais PropertyChangedCallback
e passá-lo quando você disparar seu evento personalizado.
Propriedades
NewValue |
Obtém o valor da propriedade de dependência após a alteração relatada. |
OldValue |
Obtém o valor da propriedade de dependência antes da alteração relatada. |
Property |
Obtém o identificador para a propriedade de dependência em que ocorreu a alteração de valor. |