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

注釈

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

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

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

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

Note

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

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

適用対象

こちらもご覧ください