Bagikan melalui


Cara: Menerapkan PriorityBinding

PriorityBinding di Windows Presentation Foundation (WPF) bekerja dengan menentukan daftar pengikatan. Daftar pengikatan diurutkan dari prioritas tertinggi ke prioritas terendah. Jika pengikatan prioritas tertinggi berhasil mengembalikan nilai ketika diproses maka tidak pernah ada kebutuhan untuk memproses pengikatan lain dalam daftar. Bisa jadi pengikatan prioritas tertinggi membutuhkan waktu lama untuk dievaluasi, prioritas tertinggi berikutnya yang berhasil mengembalikan nilai akan digunakan sampai pengikatan prioritas yang lebih tinggi berhasil mengembalikan nilai.

Contoh

Untuk menunjukkan cara PriorityBinding kerjanya, AsyncDataSource objek telah dibuat dengan tiga properti berikut: FastDP, SlowerDP, dan SlowestDP.

Mendapatkan aksesor FastDP mengembalikan nilai _fastDP anggota data.

Mendapatkan aksesor SlowerDP menunggu selama 3 detik sebelum mengembalikan nilai _slowerDP anggota data.

Mendapatkan aksesor SlowestDP menunggu selama 5 detik sebelum mengembalikan nilai _slowestDP anggota data.

Catatan

Contoh tersebut adalah untuk tujuan demonstrasi. Panduan .NET merekomendasikan untuk mendefinisikan properti yang merupakan urutan besarnya lebih lambat dari set bidang. Untuk informasi selengkapnya, lihat Memilih Antara Properti dan Metode.

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

Properti Text mengikat ke hal di atas AsyncDS menggunakan 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>

Ketika mesin pengikatan memproses Binding objek, mesin dimulai dengan yang pertama Binding, yang terikat ke SlowestDP properti . Ketika ini Binding diproses, itu tidak berhasil mengembalikan nilai karena tidur selama 5 detik, sehingga elemen berikutnya Binding diproses. Binding Berikutnya tidak berhasil mengembalikan nilai karena sedang tidur selama 3 detik. Mesin pengikatan kemudian bergerak ke elemen berikutnya Binding , yang terikat ke FastDP properti . Ini Binding mengembalikan nilai "Nilai Cepat". Sekarang TextBlock menampilkan nilai "Nilai Cepat".

Setelah 3 detik berlalu, SlowerDP properti mengembalikan nilai "Nilai Lebih Lambat". Kemudian TextBlock menampilkan nilai "Nilai Lebih Lambat".

Setelah 5 detik berlalu, SlowestDP properti mengembalikan nilai "Nilai Terlambat". Pengikatan tersebut memiliki prioritas tertinggi karena terdaftar terlebih dahulu. Sekarang TextBlock menampilkan nilai "Nilai Terlambat".

Lihat PriorityBinding untuk informasi tentang apa yang dianggap sebagai nilai pengembalian yang berhasil dari pengikatan.

Baca juga