Dil

PriorityBinding'in Nasıl Uygulanacağı

Windows Presentation Foundation'da (WPF) PriorityBinding, bağlamaların listesini belirterek çalışır. Bağlama listesi en yüksek öncelikten en düşük önceliğe doğru sıralanmıştır. En yüksek öncelikli bağlama işlendiğinde bir değeri başarıyla döndürürse, listedeki diğer bağlamaları işlemeye gerek yoktur. En yüksek öncelikli bağlamanın değerlendirilmesinin uzun sürmesi durumunda, bir değeri başarılı bir şekilde döndüren sonraki en yüksek öncelik, daha yüksek öncelikli bir bağlama bir değeri başarıyla döndürene kadar kullanılır.

Örnek

PriorityBinding nasıl çalıştığını göstermek için, AsyncDataSource nesnesi şu üç özellikle oluşturulmuştur: FastDP, SlowerDPve SlowestDP.

FastDP get erişimcisi, _fastDP veri üyesinin değerini döndürür.

SlowerDP alma erişimcisi, _slowerDP veri üyesinin değerini döndürmeden önce 3 saniye bekler.

SlowestDP alma erişimcisi, _slowestDP veri üyesinin değerini döndürmeden önce 5 saniye bekler.

Uyarı

Bu örnek yalnızca tanıtım amaçlıdır. .NET yönergeleri, bir alan kümesine göre kat kat daha yavaş olan özelliklerin tanımlanmasını önermemektedir. Daha fazla bilgi için bkz.Özellikler ve Yöntemler Arasında Seçim Yapma .

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

Text özelliği, AsyncDSkullanarak yukarıdaki PriorityBinding'e bağlanır.

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

Bağlama altyapısı Binding nesnelerini işlediğinde, Binding özelliğine bağlı olan ilk SlowestDPile başlar. Bu Binding işlendiğinde, 5 saniye boyunca uykuda olduğundan bir değeri başarıyla döndürmez, bu nedenle sonraki Binding öğesi işlenir. Sonraki Binding, 3 saniye boyunca uyuduğu için bir değeri başarıyla döndürmez. Bağlama altyapısı daha sonra Binding özelliğine bağlı olan sonraki FastDP öğesine geçer. Bu Binding "Hızlı Değer" ifadesini döndürür. TextBlock artık "Hızlı Değer" değerini görüntüler.

3 saniye geçtikten sonra, SlowerDP özelliği "Daha Yavaş Değer" değerini döndürür. TextBlock daha sonra "Daha Yavaş Değer" değerini görüntüler.

5 saniye geçtikten sonra SlowestDP özelliği "En Yavaş Değer" değerini döndürür. İlk olarak listelendiğinden bu bağlama en yüksek önceliğe sahiptir. TextBlock artık "En Yavaş Değer" değerini görüntüler.

Bağlamadan başarılı dönüş değeri olarak kabul edilenler hakkında bilgi için bkz. PriorityBinding.

Ayrıca bakınız