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 は、依存関係プロパティ システムが要求された依存関係プロパティ値を特定できないシナリオで使用されるセンチネル値です。 Null はほとんどの参照型値の有効なプロパティ値であり、依存関係プロパティのメタデータで頻繁に使用される DefaultValue であるため、UnsetValue は null ではなく使用されます。

UnsetValue は、 DependencyObject.GetValue 呼び出しから返されることはありません。 依存関係プロパティに対して DependencyObject.GetValue を呼び出すと、次のいずれかの条件が常に満たされます。

  • 依存関係プロパティには、メタデータで設定された既定値があり、その値が返されます。 この値は、プロパティ メタデータの DefaultValue から取得される場合があります。 これは null である可能性があります。
  • 値の優先順位によって他のいくつかの値が確立され (スタイルが適用された、 Binding が評価されたなど)、既定値は関連しなくなりました。 特に設定されていても、これは引き続き null である可能性があります。 値の優先順位の詳細については、「 依存関係プロパティの概要」を参照してください。

DependencyObject.ReadLocalValue は、要求されたプロパティがローカルに設定されていない場合に UnsetValue を返します。

注意

依存関係プロパティを既定値の UnsetValue に登録しないでください。 これは、プロパティ コンシューマーにとって混乱を招き、プロパティ システム内で意図しない結果を招く可能性があります。

コンバーターがソース値を変換できない場合は、依存関係プロパティへのデータ バインディングでの変換を提供する IValueConverter 実装から UnsetValue を返す必要があります。 コンバーターは 、IValueConverter.Convert でその場合の例外をスローしないでください。これらは UnhandledException で処理を追加する必要がある実行時例外として表示されます。さらに悪いことに、ユーザーには実際の実行時例外として表示されます。 コンバーターの実装は、失敗したバインディングは何も行わず、値を提供しないという一般的なバインディング パターンに従う必要があります。 また、null ではなく UnsetValue は、バインディング エンジンが認識するその場合の sentinel 値です。 詳しくは、「データ バインディングの詳細」をご覧ください。

適用対象

こちらもご覧ください