Postupy: Implementace rozhraní PriorityBinding

PriorityBinding v systému Windows Presentation Foundation (WPF) funguje zadáním seznamu vazeb. Seznam vazeb je seřazený od nejvyšší priority po nejnižší prioritu. Pokud vazba s nejvyšší prioritou při zpracování úspěšně vrátí hodnotu, není nikdy nutné zpracovat ostatní vazby v seznamu. Může se jednat o případ, že vyhodnocení vazby s nejvyšší prioritou trvá dlouhou dobu. Další nejvyšší priorita, která vrátí hodnotu úspěšně, se použije, dokud vazba vyšší priority nevrátí hodnotu úspěšně.

Příklad

Chcete-li předvést, jak PriorityBinding funguje, AsyncDataSource objekt byl vytvořen s následujícími třemi vlastnostmi: FastDP, SlowerDPa SlowestDP.

Get Accessor of FastDP vrátí hodnotu datového členu _fastDP .

Získání přístupového objektu SlowerDP čekání po dobu 3 sekund před vrácením hodnoty datového členu _slowerDP .

Získání přístupového objektu SlowestDP čekání po dobu 5 sekund před vrácením hodnoty datového členu _slowestDP .

Poznámka:

Tento příklad je určen pouze pro demonstrační účely. Pokyny .NET doporučují definovat vlastnosti, které jsou řádově pomalejší než sada polí. Další informace naleznete v tématu Volba mezi vlastnostmi a metodami.

public class AsyncDataSource
{
  private string _fastDP;
  private string _slowerDP;
  private string _slowestDP;

  public AsyncDataSource()
  {
  }

  public string FastDP
  {
    get { return _fastDP; }
    set { _fastDP = value; }
  }

  public string SlowerDP
  {
    get
    {
      // This simulates a lengthy time before the
      // data being bound to is actualy available.
      Thread.Sleep(3000);
      return _slowerDP;
    }
    set { _slowerDP = value; }
  }

  public string SlowestDP
  {
    get
    {
      // This simulates a lengthy time before the
      // data being bound to is actualy available.
      Thread.Sleep(5000);
      return _slowestDP;
    }
    set { _slowestDP = value; }
  }
}
Public Class AsyncDataSource
    ' Properties
    Public Property FastDP As String
        Get
            Return Me._fastDP
        End Get
        Set(ByVal value As String)
            Me._fastDP = value
        End Set
    End Property

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

    Public Property SlowestDP As String
        Get
            Thread.Sleep(5000)
            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

Vlastnost Text je vázána na výše AsyncDS pomocí PriorityBinding:

<Window.Resources>
  <c:AsyncDataSource SlowestDP="Slowest Value" SlowerDP="Slower Value"
                     FastDP="Fast Value" x:Key="AsyncDS" />
</Window.Resources>
  
<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">
    <TextBlock.Text>
      <PriorityBinding FallbackValue="defaultvalue">
        <Binding Path="SlowestDP" IsAsync="True"/>
        <Binding Path="SlowerDP" IsAsync="True"/>
        <Binding Path="FastDP" />
      </PriorityBinding>
    </TextBlock.Text>
  </TextBlock>	
</StackPanel>

Když vazební modul zpracovává Binding objekty, začíná prvním Binding, který je vázán na SlowestDP vlastnost. Při zpracování Binding nevrací hodnotu úspěšně, protože spí po dobu 5 sekund, takže další Binding prvek se zpracuje. Další Binding nevrací hodnotu úspěšně, protože spí po dobu 3 sekund. Vazební modul se pak přesune na další Binding prvek, který je vázán na FastDP vlastnost. Tím Binding se vrátí hodnota "Fast Value". Teď TextBlock se zobrazí hodnota "Rychlá hodnota".

Po uplynutí 3 sekund vrátí SlowerDP vlastnost hodnotu Pomalejší hodnota. Potom TextBlock zobrazí hodnotu Pomalejší hodnota.

Po uplynutí 5 sekund SlowestDP vrátí vlastnost hodnotu "Nejpomalejší hodnota". Tato vazba má nejvyšší prioritu, protože je uvedená jako první. Zobrazí TextBlock se hodnota "Nejpomalejší hodnota".

Přečtěte si PriorityBinding informace o tom, co se považuje za úspěšnou návratovou hodnotu z vazby.

Viz také