DependencyPropertyChangedEventArgs Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona datos para una implementación propertyChangedCallback que se invoca cuando una propiedad de dependencia cambia su valor. También proporciona datos de eventos para el evento Control.IsEnabledChanged y cualquier otro evento que use el 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
- Herencia
- Atributos
Ejemplos
En este ejemplo se muestra una implementación propertyChangedCallback que usa los datos del DependencyPropertyChangedEventArgs
evento. En concreto, usa NewValue para establecer una propiedad relacionada, que muestra el valor de DependencyProperty numérico subyacente como texto, en una parte TextBlock de un control compuesto.
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();
}
Comentarios
DependencyPropertyChangedEventArgs
proporciona datos para dos situaciones diferentes que implican cambios en los valores de propiedad de dependencia:
- Información de devolución de llamada situacional que usa un PropertyChangedCallback para una propiedad de dependencia personalizada. Este es el caso más común.
- Datos de eventos de un evento basado en DependencyPropertyChangedEventHandler. Esto es menos común porque el único evento Windows Runtime que usa este delegado es el evento Control.IsEnabledChanged. Para obtener más información sobre cómo usar los datos de
DependencyPropertyChangedEventArgs
eventos en este caso, consultaDependencyPropertyChangedEventHandler
oControl.IsEnabledChanged
.
Una implementación propertyChangedCallback es una parte opcional de los metadatos de propiedad que se proporcionan al registrar una propiedad de dependencia. El sistema de propiedades de dependencia invoca internamente la devolución de llamada. Para obtener más información sobre las propiedades de dependencia en general, consulte Propiedades de dependencia personalizadas y Información general sobre las propiedades de dependencia.
Normalmente, se define el método con acceso privado o interno. El método debe ser estático. Dado que el método es estático, es importante el parámetro DependencyObject (d) del delegado PropertyChangedCallback . Eso es lo que identifica la instancia de objeto de dependencia específica en la que cambia la propiedad. Para muchas operaciones, como corregir o coercr un valor, o cambiar otro valor de propiedad calculado en respuesta en el mismo objeto, hará referencia a este DependencyObject
. Normalmente, querrá convertirlo al tipo de propietario de la propiedad que cambia. El tipo de propietario es el tipo al que se hace referencia por nombre en la llamada DependencyProperty.Register ; los metadatos en PropertyChangedCallback
los que se asigna a los metadatos de propiedad forman parte de esa misma llamada.
Tenga en cuenta la posibilidad de recursividad. Si cambia el valor de una propiedad de dependencia para la que se invoca PropertyChangedCallback , se volverá a invocar. Por ejemplo, si creaste una devolución de llamada para una Double
propiedad en la que la devolución de llamada siempre dividió el valor en 2, esa devolución de llamada se llamaría de forma recursiva y la aplicación estaría en un bucle infinito.
Es legal tener dos o más propiedades de dependencia diferentes que definan devoluciones de llamada para cambiarse entre sí, pero tenga cuidado de no crear una dependencia circular involuntaria que no permita estabilizar los valores.
Un PropertyChangedCallback solo se invoca si OldValue y NewValue en los datos del evento son diferentes.
OldValue y NewValue no tienen tipo, por lo que cualquier comparación que realice probablemente necesite una conversión. Muchos valores de propiedad de dependencia usan un tipo de valor, lo que significa que confiará en los operadores u otra API del tipo de valor para realizar las comparaciones. Esa funcionalidad suele estar disponible en la estructura que representa un valor, como una API de utilidad. Por ejemplo, la API de utilidad específica del lenguaje en un valor de Grosor le permite comparar Thickness
valores.
Nota
Si va a programar con C++, algunas de las estructuras de Windows Runtime no admiten miembros que no son de datos, por lo que no admite operadores u otra utilidad. Para ello, hay una clase complementaria Helper
que proporciona la API de comparación que el código de C++ puede usar. Por ejemplo, use la clase ColorHelper para comparar los valores de Color .
Uso de DependencyPropertyChangedEventArgs para un evento personalizado
Un implementador de control personalizado podría considerar el uso de DependencyPropertyChangedEventHandler como tipo de delegado si se desencadena un evento personalizado como resultado de un cambio de valor de propiedad de dependencia. Solo puede activar este evento desde el contexto de un PropertyChangedCallback. Esto se debe a que el valor que cambió (la propiedad, el valor anterior y el nuevo) debe estar en el DependencyPropertyChangedEventArgs
que se notifican para el evento en el nivel del sistema de propiedades. Pero no hay constructores para DependencyPropertyChangedEventArgs
y ninguna de sus propiedades se pueden establecer, por lo que la única manera de obtener un DependencyPropertyChangedEventArgs
valor es obtenerlo de los parámetros originales PropertyChangedCallback
y pasarlo a través al desencadenar el evento personalizado.
Propiedades
NewValue |
Obtiene el valor de la propiedad de dependencia después del cambio notificado. |
OldValue |
Obtiene el valor de la propiedad de dependencia antes del cambio notificado. |
Property |
Obtiene el identificador para la propiedad de dependencia en la que se produjo el cambio de valor. |