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

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

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

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

注意

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

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

適用対象

こちらもご覧ください