Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
PriorityBinding i Windows Presentation Foundation (WPF) fungerar genom att ange en lista med bindningar. Listan över bindningar sorteras från högsta prioritet till lägsta prioritet. Om den högsta prioritetsbindningen returnerar ett värde när det bearbetas behöver du aldrig bearbeta de andra bindningarna i listan. Det kan vara så att bindningen med högst prioritet tar lång tid att utvärdera. Den näst högsta prioriteten som returnerar ett värde kommer att användas tills en bindning med högre prioritet returnerar ett värde.
Exempel
För att visa hur PriorityBinding fungerar har AsyncDataSource-objektet skapats med följande tre egenskaper: FastDP, SlowerDPoch SlowestDP.
Get-accessorn för FastDP returnerar värdet av datamedlemmen _fastDP.
get-tillgångsfunktionen för SlowerDP väntar i 3 sekunder innan värdet av _slowerDP-medlemmen returneras.
Get-accessorn för SlowestDP väntar 5 sekunder innan den returnerar värdet av _slowestDP:s datamedlem.
Anmärkning
Det här exemplet är endast i demonstrationssyfte. .NET-riktlinjerna rekommenderar att du inte definierar egenskaper som är storleksordningar långsammare än en fältuppsättning. Mer information finns i Välja mellan egenskaper och metoder.
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
Egenskapen Text binder till ovanstående AsyncDS med hjälp av 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>
När bindningsmotorn bearbetar de Binding objekten börjar den med den första Binding, som är bunden till egenskapen SlowestDP. När den här Binding bearbetas returnerar den inte ett värde framgångsrikt eftersom den är inaktiv i 5 sekunder, vilket medför att nästa Binding-element bearbetas. Nästa Binding returnerar inte ett värde eftersom det ligger i viloläge i 3 sekunder. Bindningsmotorn flyttas sedan till nästa Binding element, som är bundet till egenskapen FastDP. Den här Binding returnerar värdet "Fast Value".
TextBlock visar nu värdet "Snabbt värde".
Efter 3 sekunder returnerar egenskapen SlowerDP värdet "Långsammare värde".
TextBlock visar sedan värdet "Slower Value".
Efter 5 sekunder returnerar egenskapen SlowestDP värdet "Långsammast värde". Bindningen har högsta prioritet eftersom den visas först.
TextBlock visar nu värdet "Långsammast värde".
Mer information om vad som anses vara ett lyckat returvärde från en bindning finns i PriorityBinding.
Se även
.NET Desktop feedback