Sdílet prostřednictvím


Postupy: Implementace PriorityBindingu

PriorityBinding ve 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

Abychom ukázali, jak PriorityBinding funguje, byl objekt AsyncDataSource vytvořen s následujícími třemi vlastnostmi: FastDP, SlowerDPa SlowestDP.

Přístupový člen get FastDP vrací hodnotu datového členu _fastDP.

Přístupová metoda pro získání SlowerDP čeká 3 sekundy, než vrátí hodnotu datového člena _slowerDP.

Přístup SlowestDP čeká 5 sekundy před vrácením hodnoty člena dat _slowestDP.

Poznámka

Tento příklad je určen pouze pro demonstrační účely. Pokyny .NET nedoporučují definovat vlastnosti, které jsou řádově pomalejší než by byla 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 se sváže s výše uvedenými 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>

Vazební modul zpracuje objekty Binding a začíná s prvním Binding, který je vázán na vlastnost SlowestDP. Při zpracování tohoto Binding nevrací úspěšně hodnotu, protože spí po dobu 5 sekund, takže se zpracuje další Binding prvek. Další Binding nevrací hodnotu úspěšně, protože spí po dobu 3 sekund. Vazební modul se pak přesune na další prvek Binding, který je vázán na vlastnost FastDP. Tato Binding vrátí hodnotu "Rychlá hodnota". TextBlock nyní zobrazuje hodnotu "Rychlá hodnota".

Po uplynutí 3 sekund vlastnost SlowerDP vrátí hodnotu „Pomalejší hodnota“. TextBlock pak zobrazí hodnotu "Pomalejší hodnota".

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

Informace o tom, co se považuje za úspěšnou návratovou hodnotu z vazby, najdete v PriorityBinding.

Viz také