DependencyProperty.UnsetValue Свойство

Определение

Задает статическое значение, которое используется системой свойств, а не null , чтобы указать, что свойство существует, но не имеет его значения, заданного системой свойств или кодом приложения.

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

Значение свойства

Object

Platform::Object

IInspectable

Значение sentinel для неустановленного значения.

Примеры

В этом примере проверяется наличие существующего локального значения с помощью ReadLocalValue. Если имеется локальное значение, о чем свидетельствует не возврат UnsetValue, существующее локальное значение удаляется путем вызова 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

Комментарии

UnsetValue — это значение sentinel, которое используется в сценариях, когда система свойств зависимостей не может определить запрошенное значение свойства зависимостей. UnsetValue используется вместо null, так как null является допустимым значением свойства для большинства значений ссылочного типа и часто используется DefaultValue в метаданных для свойства зависимостей.

UnsetValue никогда не возвращается из вызова DependencyObject.GetValue . При вызове DependencyObject.GetValue для свойства зависимостей всегда выполняется одно из следующих условий:

  • Свойство зависимости имеет значение по умолчанию, установленное в метаданных, и это значение возвращается. Это значение может поступать из значения DefaultValue метаданных свойства. Может иметь значение NULL.
  • Другое значение было установлено с помощью приоритета значений (например, применен стиль или оценка привязки ), и значение по умолчанию больше не имеет значения. Несмотря на то, что задано специально, это значение все равно может иметь значение NULL. Дополнительные сведения о приоритете значений см. в статье Общие сведения о свойствах зависимостей.

DependencyObject.ReadLocalValue возвращает UnsetValue, если запрошенное свойство не задано локально.

Примечание

Не регистрируйте свойство зависимостей со значением по умолчанию UnsetValue. Это будет запутано для потребителей свойств и будет иметь непредвиденные последствия в системе свойств.

UnsetValue должен возвращаться из реализации IValueConverter , которая обеспечивает преобразование в привязке данных в свойство зависимостей в любом случае, когда преобразователь не может преобразовать исходное значение. Преобразователи не должны создавать исключения в этом случае в IValueConverter.Convert. Они будут отображаться как исключения времени выполнения, которые необходимо добавить для обработки в UnhandledException или еще хуже, будут отображаться пользователям как фактические исключения во время выполнения. Реализации преобразователя должны соответствовать общему шаблону привязки, что любая неисправная привязка ничего не делает и не предоставляет значения, а UnsetValue, а не null является значением sentinel для этого случая, понятного подсистеме привязки. Дополнительные сведения см. в статье Подробно о привязке данных.

Применяется к

См. также раздел