Nasıl yapılır: PriorityBinding Uygulama

PriorityBindingWindows Presentation Foundation (WPF), bir bağlama listesi belirterek çalışır. Bağlama listesi en yüksek öncelikten en düşük önceliğe doğru sıratır. En yüksek öncelikli bağlama, işlendiğinde bir değeri başarıyla döndürürse, hiçbir zaman listede diğer bağlamaları işlemeye gerek yoktur. En yüksek öncelikli bağlamanın değerlendirilmesi uzun sürüyor olabilir. Bir değeri başarıyla döndüren bir sonraki en yüksek öncelik, daha yüksek önceliğe sahip bir bağlama bir değeri başarıyla döndürene kadar kullanılır.

Örnek

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

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

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

Veri üyesinin SlowestDP değerini döndürmeden önce get erişimcisi 5 saniye _slowestDP bekler.

Not

Bu örnek yalnızca tanıtım amaçlıdır. .NET yönergeleri, bir alan kümesinden daha yavaş olan büyüklük siparişleri olan özellikleri tanımlamayı önermektedir. Daha fazla bilgi için bkz. Özellikler ve Yöntemler Arasında Seçim.

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

özelliği Text kullanılarak yukarıdakine AsyncDS PriorityBinding bağlanıyor:

<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ı nesneleri Binding işleyene, özelliğine bağlı Binding olan ilk ile SlowestDP başlar. Bu işlendiğinde, 5 saniye uykuda olduğundan başarıyla bir değer Binding dönmez, bu nedenle sonraki Binding öğe işlenir. Sonraki Binding değer, 3 saniye uykuda olduğundan başarıyla değer dönmez. Bağlama altyapısı daha sonra özelliğine Binding bağlı olan sonraki öğeye FastDP taşınır. Bu, Binding "Hızlı Değer" değerini döndürür. artık TextBlock "Hızlı Değer" değerini görüntüler.

3 saniyenin ardından özelliği SlowerDP "Yavaş Değer" değerini döndürür. ardından TextBlock "Yavaş Değer" değerini görüntüler.

5 saniyenin ardından özelliği SlowestDP "En Yavaş Değer" değerini döndürür. Bu bağlama en yüksek önceliğe sahiptir çünkü ilk olarak listelenir. artık TextBlock "En Yavaş Değer" değerini görüntüler.

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

Ayrıca bkz.