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
.NET Desktop feedback