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
Значение свойства
Значение 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 для этого случая, понятного подсистеме привязки. Дополнительные сведения см. в статье Подробно о привязке данных.