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.