UnsetValue-Eigenschaft
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern

DependencyProperty.UnsetValue Property

Gibt einen statischen Wert an, der vom Eigenschaftensystem anstelle von null verwendet wird, um anzugeben, dass die Eigenschaft vorhanden ist, der Wert jedoch nicht vom Eigenschaftensystem oder einem App-Code festgelegt wird.

Syntax


public static object UnsetValue { get; }

Eigenschaftswert

Typ: System.Object [.NET] | Platform::Object [C++]

Der Sentinelwert für einen nicht festgelegten Wert.

Hinweise

UnsetValue ist ein Sentinelwert, der in Szenarien verwendet wird, in denen das Abhängigkeitseigenschaftssystem einen angeforderten Abhängigkeitseigenschaftswert nicht bestimmen kann. UnsetValue wird anstelle von null verwendet, da null ein gültiger Eigenschaftswert für die meisten Verweistypwerte ist, und ist ein häufig verwendeter DefaultValue in Metadaten für eine Abhängigkeitseigenschaft.

UnsetValue wird nie mit einem DependencyObject.GetValue-Aufruf zurückgegeben. Wenn Sie DependencyObject.GetValue für eine Abhängigkeitseigenschaft aufrufen, ist eine dieser Bedingungen immer wahr:

  • Bei einer Abhängigkeitseigenschaft ist in den Metadaten ein Standardwert festgelegt, und dieser Wert wird zurückgegeben. Dieser Wert könnte aus dem DefaultValue der Eigenschaftenmetadaten stammen. Dieser kann null sein.
  • Ein anderer Wert wurde durch Wertrangfolge festgelegt (beispielsweise wurde ein Format angewendet oder ein Binding ausgewertet), und der Standardwert ist nicht mehr relevant. Obwohl speziell festgelegt, ist dies immer noch null. Weitere Informationen zur Wertpriorität finden Sie unter Übersicht über Abhängigkeitseigenschaften.

Die DependencyObject.ReadLocalValue-Methode gibt die UnsetValue-Eigenschaft zurück, wenn die angeforderte Eigenschaft nicht lokal festgelegt wurde.

Vorsicht  Registrieren Sie keine Abhängigkeitseigenschaft mit dem Standardwert der UnsetValue-Eigenschaft. Dies ist für Eigenschaftenconsumer verwirrend und hat unerwünschte Folgen im Eigenschaftensystem.

UnsetValue sollte von einer IValueConverter-Implementierung zurückgegeben werden, die eine Konvertierung in einer Datenbindung zu einer Abhängigkeitseigenschaft bereitstellt, für den Fall, dass der Konverter nicht in der Lage ist, einen Quellwert zu konvertieren. Konverter sollten in diesem Fall keinen Ausnahmen in IValueConverter.Convert auslösen; diese würden als Laufzeitausnahmen auftreten, die Sie in UnhandledException behandeln müssen, oder die in einem ungünstigeren Fall den Benutzern als tatsächliche Laufzeitausnahmen angezeigt werden. Konverterimplementierungen sollten dem allgemeinen Bindungsmuster folgen. Das bedeutet, dass eine fehlerhafte Bindung weder eine Aktion vollzieht noch einen Wert bereitstellt, und UnsetValue anstelle von null der Sentinelwert für diesen Fall ist, den das Bindungsmodul interpretieren kann. Weitere Informationen finden Sie im Abschnitt "Datenkonvertierungen" des Themas "Übersicht über die Datenbindung".

Beispiele

In diesem Beispiel wird mithilfe von ReadLocalValue auf einen vorhandenen lokalen Wert geprüft. Wenn es einen lokalen Wert gibt, wie durch die Nichtrückgabe von UnsetValue angegeben, wird der vorhandene lokale Wert durch den Aufruf von ClearValue entfernt.


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;
    }
}


Anforderungen

Mindestens unterstützter Client

Windows 8

Mindestens unterstützter Server

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

DependencyProperty
IValueConverter.Convert
Benutzerdefinierte Abhängigkeitseigenschaften
Übersicht über Abhängigkeitseigenschaften
Übersicht über die Datenbindung

 

 

Anzeigen:
© 2018 Microsoft