DependencyProperty.UnsetValue Propiedad
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í.
Especifica un valor estático que usa el sistema de propiedades en lugar de null para indicar que la propiedad existe, pero no tiene su valor establecido por el sistema de propiedades o por cualquier código de aplicación.
public:
static property Platform::Object ^ UnsetValue { Platform::Object ^ get(); };
static IInspectable UnsetValue();
public static object UnsetValue { get; }
var object = DependencyProperty.unsetValue;
Public Shared ReadOnly Property UnsetValue As Object
Valor de propiedad
Valor centinela de un valor sin establecer.
Ejemplos
En este ejemplo se comprueba si hay un valor local existente con ReadLocalValue. Si hay un valor local, como se indica al no devolver UnsetValue, el valor local existente se quita llamando a ClearValue.
public static bool ClearSetProperty(DependencyObject targetObject, DependencyProperty targetDP)
{
if (targetObject == null || targetDP == null)
{
throw new ArgumentNullException();
}
object localValue = targetObject.ReadLocalValue(targetDP);
if (localValue == DependencyProperty.UnsetValue)
{
return false;
}
else
{
targetObject.ClearValue(targetDP);
return true;
}
}
Public Shared Function ClearSetProperty(targetObject As DependencyObject, targetDP As DependencyProperty) As Boolean
If targetObject Is Nothing Or targetDP Is Nothing Then
Throw New ArgumentNullException()
End If
Dim localValue As Object = targetObject.ReadLocalValue(targetDP)
If localValue = DependencyProperty.UnsetValue Then
ClearSetProperty = False
Else
targetObject.ClearValue(targetDP)
ClearSetProperty = True
End If
End Function
Comentarios
UnsetValue es un valor centinela que se usa para escenarios en los que el sistema de propiedades de dependencia no puede determinar un valor de propiedad de dependencia solicitado. UnsetValue se usa en lugar de null, porque null es un valor de propiedad válido para la mayoría de los valores de tipo de referencia y es un DefaultValue usado con frecuencia en los metadatos de una propiedad de dependencia.
UnsetValue nunca se devuelve fuera de una llamada DependencyObject.GetValue . Cuando se llama a DependencyObject.GetValue para una propiedad de dependencia, una de estas condiciones siempre es verdadera:
- Una propiedad de dependencia tiene un valor predeterminado establecido en metadatos y ese valor se devuelve. Este valor puede provenir de DefaultValue de los metadatos de la propiedad. Esto puede ser null.
- Se estableció otro valor a través de la precedencia de valor (por ejemplo, se aplicó un estilo o se evaluó un enlace ) y el valor predeterminado ya no es relevante. Aunque se establezca específicamente, esto puede ser null. Para obtener más información sobre la precedencia de valores, consulte Información general sobre las propiedades de dependencia.
DependencyObject.ReadLocalValue devuelve UnsetValue cuando la propiedad solicitada no se ha establecido localmente.
Nota
No registre una propiedad de dependencia con el valor predeterminado de UnsetValue. Esto resultará confuso para los consumidores de propiedades y tendrá consecuencias imprevistas dentro del sistema de propiedades.
UnsetValue debe devolverse desde una implementación de IValueConverter que proporcione la conversión en un enlace de datos a una propiedad de dependencia, en cualquier caso en el que el convertidor no pueda convertir un valor de origen. Los convertidores no deben producir excepciones para ese caso en IValueConverter.Convert, se mostrarán como excepciones en tiempo de ejecución que tendría que agregar control para en UnhandledException o peor aún aparecen a los usuarios como excepciones en tiempo de ejecución reales. Las implementaciones del convertidor deben seguir el patrón de enlace general que cualquier enlace con errores no hace nada y no proporciona un valor, y UnsetValue en lugar de null es el valor de sentinel para ese caso que el motor de enlace entiende. Para obtener más información, consulta el tema Enlace de datos en profundidad.