Porady: implementowanie PriorityBinding
PriorityBinding W programie Windows Presentation Foundation (WPF) działa określenie listy powiązań. Lista powiązań jest uporządkowana od najwyższego priorytetu do najniższego priorytetu. Jeśli powiązanie o najwyższym priorytcie zwraca wartość pomyślnie przetworzoną, nigdy nie trzeba przetwarzać innych powiązań na liście. Może się okazać, że obliczanie powiązania o najwyższym priorytcie zajmuje dużo czasu. Następny najwyższy priorytet, który zwraca wartość pomyślnie, zostanie użyty do momentu pomyślnego zwrócenie wartości o wyższym priorytetu.
Przykład
Aby zademonstrować, jak PriorityBinding działa, AsyncDataSource
obiekt został utworzony przy użyciu następujących trzech właściwości: FastDP
, SlowerDP
i SlowestDP
.
Metoda pobierania FastDP
zwraca wartość _fastDP
elementu członkowskiego danych.
Uzyskiwanie dostępu SlowerDP
do oczekiwania przez 3 sekundy przed zwróceniem wartości _slowerDP
elementu członkowskiego danych.
Uzyskiwanie dostępu SlowestDP
do oczekiwania przez 5 sekund przed zwróceniem wartości _slowestDP
elementu członkowskiego danych.
Uwaga
Ten przykład służy tylko do celów demonstracyjnych. Wytyczne dotyczące platformy .NET zalecają definiowanie właściwości o większej wielkości niż zestaw pól. Aby uzyskać więcej informacji, zobacz Wybieranie między właściwościami i metodami.
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
Właściwość Text wiąże się z powyższymi AsyncDS
elementami przy użyciu polecenia 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>
Gdy aparat powiązań przetwarza Binding obiekty, rozpoczyna się od pierwszego Binding, który jest powiązany z właściwością SlowestDP
. Po przetworzeniu nie Binding zwraca ona pomyślnie wartości, ponieważ jest spana przez 5 sekund, więc następny Binding element jest przetwarzany. Następna Binding wartość nie zwraca pomyślnie, ponieważ śpi przez 3 sekundy. Następnie aparat wiązania przechodzi do następnego Binding elementu, który jest powiązany z właściwością FastDP
. Spowoduje to Binding zwrócenie wartości "Fast Value". Teraz TextBlock wyświetla wartość "Szybka wartość".
Po upływie 3 sekund SlowerDP
właściwość zwraca wartość "Wolniejsza wartość". Następnie TextBlock wyświetla wartość "Wolniejsza wartość".
Po upływie 5 sekund SlowestDP
właściwość zwraca wartość "Najwolniejsza wartość". To powiązanie ma najwyższy priorytet, ponieważ jest ono wymienione jako pierwsze. Teraz TextBlock wyświetla wartość "Najwolniejsza wartość".
Zobacz PriorityBinding , aby uzyskać informacje o tym, co jest uznawane za pomyślną wartość zwracaną z powiązania.
Zobacz też
.NET Desktop feedback