This documentation is archived and is not being maintained.

BindingBase.FallbackValue Property

Gets or sets the value to use when the binding is unable to return a value.

Namespace:  System.Windows.Data
Assembly:  PresentationFramework (in PresentationFramework.dll)

Public Property FallbackValue As Object
Dim instance As BindingBase 
Dim value As Object 

value = instance.FallbackValue

instance.FallbackValue = value
<object FallbackValue="fallbackValue" /><object>
    <fallbackValue .../>

XAML Values


A value of the same type as the target property. See that type's documentation for Extensible Application Markup Language (XAML) usage information. That type may or may not support attribute syntax for its values, or may or may not support object element syntax (which requires a default constructor on that type). The target property type will therefore influence which syntax you use for the value of the FallbackValue property.

Property Value

Type: System.Object
The default value is DependencyProperty.UnsetValue.

A binding returns a value successfully if:

  1. The path to the binding source resolves successfully.

  2. The value converter, if any, is able to convert the resulting value.

  3. The resulting value is valid for the binding target (target) property.

If 1 and 2 return DependencyProperty.UnsetValue, the target property is set to the value of the FallbackValue, if one is available. If there is no FallbackValue, the default value of the target property is used.

The value DependencyProperty.UnsetValue is not considered a successful return value.

PriorityBinding in Windows Presentation Foundation (WPF) works by specifying a list of bindings. The list of bindings is ordered from highest priority to lowest priority. If the highest priority binding returns a value successfully when it is processed then there is never a need to process the other bindings in the list. It could be the case that the highest priority binding takes a long time to be evaluated, the next highest priority that returns a value successfully will be used until a binding of a higher priority returns a value successfully.

To demonstrate how PriorityBinding works, the AsyncDataSource object has been created with the following three properties: FastDP, SlowerDP, and SlowestDP.

The get accessor of FastDP returns the value of the _fastDP data member.

The get accessor of SlowerDP waits for 3 seconds before returning the value of the _slowerDP data member.

The get accessor of SlowestDP waits for 5 seconds before returning the value of the _slowestDP data member.


This example is for demonstration purposes only. The Microsoft .NET guidelines recommend against defining properties that are orders of magnitude slower than a field set would be. For more information, see Choosing Between Properties and Methods.

Public Class AsyncDataSource
    ' Properties 
    Public Property FastDP As String 
            Return Me._fastDP
        End Get 
        Set(ByVal value As String)
            Me._fastDP = value
        End Set 
    End Property 

    Public Property SlowerDP As String 
            Return Me._slowerDP
        End Get 
        Set(ByVal value As String)
            Me._slowerDP = value
        End Set 
    End Property 

    Public Property SlowestDP As String 
            Return Me._slowestDP
        End Get 
        Set(ByVal value As String)
            Me._slowestDP = value
        End Set 
    End Property 

    ' Fields 
    Private _fastDP As String 
    Private _slowerDP As String 
    Private _slowestDP As String 
End Class

The Text property binds to the above AsyncDS using PriorityBinding:

  <c:AsyncDataSource SlowestDP="Slowest Value" SlowerDP="Slower Value"
                     FastDP="Fast Value" x:Key="AsyncDS" />
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"
  DataContext="{Binding Source={StaticResource AsyncDS}}">
  <TextBlock FontSize="18" FontWeight="Bold" Margin="10"
    HorizontalAlignment="Center">Priority Binding</TextBlock>
  <TextBlock Background="Honeydew" Width="100" HorizontalAlignment="Center">
      <PriorityBinding FallbackValue="defaultvalue">
        <Binding Path="SlowestDP" IsAsync="True"/>
        <Binding Path="SlowerDP" IsAsync="True"/>
        <Binding Path="FastDP" />

When the binding engine processes the Binding objects, it starts with the first Binding, which is bound to the SlowestDP property. When this Binding is processed, it does not return a value successfully because it is sleeping for 5 seconds, so the next Binding element is processed. The next Binding does not return a value successfully because it is sleeping for 3 seconds. The binding engine then moves onto the next Binding element, which is bound to the FastDP property. This Binding returns the value "Fast Value". The TextBlock now displays the value "Fast Value".

After 3 seconds elapses, the SlowerDP property returns the value "Slower Value". The TextBlock then displays the value "Slower Value".

After 5 seconds elapses, the SlowestDP property returns the value "Slowest Value". That binding has the highest priority because it is listed first. The TextBlock now displays the value "Slowest Value".

See PriorityBinding for information about what is considered a successful return value from a binding.

For the complete sample, see Binding Using PriorityBinding Sample.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0