DependencyProperty.UnsetValue Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Specifica un valore statico utilizzato dal sistema di proprietà anziché null per indicare che la proprietà esiste, ma non ha il relativo valore impostato dal sistema di proprietà o da qualsiasi codice dell'app.
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
Valore della proprietà
Valore sentinel per un valore non impostato.
Esempio
In questo esempio viene verificato un valore locale esistente con ReadLocalValue. Se è presente un valore locale, come indicato dalla mancata restituzione di UnsetValue, il valore locale esistente viene rimosso chiamando 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
Commenti
UnsetValue è un valore sentinel usato per gli scenari in cui il sistema di proprietà di dipendenza non è in grado di determinare un valore della proprietà di dipendenza richiesto. UnsetValue viene usato anziché null, perché Null è un valore di proprietà valido per la maggior parte dei valori di tipo riferimento ed è un valore DefaultValue usato di frequente nei metadati per una proprietà di dipendenza.
UnsetValue non viene mai restituito da una chiamata DependencyObject.GetValue . Quando si chiama DependencyObject.GetValue per una proprietà di dipendenza, una di queste condizioni è sempre vera:
- Una proprietà di dipendenza ha un valore predefinito stabilito nei metadati e tale valore viene restituito. Questo valore può provenire da DefaultValue dei metadati della proprietà. Potrebbe trattarsi di null.
- È stato stabilito un altro valore tramite la precedenza del valore (ad esempio è stato applicato uno stile o è stato valutato un binding) e il valore predefinito non è più rilevante. Anche se impostato in modo specifico, questo potrebbe comunque essere Null. Per altre informazioni sulla precedenza dei valori, vedi Panoramica delle proprietà di dipendenza.
DependencyObject.ReadLocalValue restituisce UnsetValue quando la proprietà richiesta non è stata impostata localmente.
Nota
Non registrare una proprietà di dipendenza con il valore predefinito UnsetValue. Ciò confonderà i consumer di proprietà e avrà conseguenze impreviste all'interno del sistema di proprietà.
UnsetValue deve essere restituito da un'implementazione IValueConverter che fornisce la conversione in un data binding in una proprietà di dipendenza, in qualsiasi caso in cui il convertitore non è in grado di convertire un valore di origine. I convertitori non devono generare eccezioni per questo caso in IValueConverter.Convert, che verranno visualizzate come eccezioni in fase di esecuzione che è necessario aggiungere la gestione per in UnhandledException o peggio sembrano ancora agli utenti come eccezioni di runtime effettive. Le implementazioni del convertitore devono seguire il modello di associazione generale che qualsiasi associazione non riuscita non esegue alcuna operazione e non fornisce un valore e UnsetValue anziché Null è il valore sentinel per quel caso che il motore di associazione riconosce. Per altre info, vedi Informazioni approfondite sul data binding.