Postupy: Implementace rozhraní PriorityBinding
PriorityBinding v systému Windows Presentation Foundation (WPF) funguje zadáním seznamu vazeb. Seznam vazeb je seřazený od nejvyšší priority po nejnižší prioritu. Pokud vazba s nejvyšší prioritou při zpracování úspěšně vrátí hodnotu, není nikdy nutné zpracovat ostatní vazby v seznamu. Může se jednat o případ, že vyhodnocení vazby s nejvyšší prioritou trvá dlouhou dobu. Další nejvyšší priorita, která vrátí hodnotu úspěšně, se použije, dokud vazba vyšší priority nevrátí hodnotu úspěšně.
Příklad
Chcete-li předvést, jak PriorityBinding funguje, AsyncDataSource
objekt byl vytvořen s následujícími třemi vlastnostmi: FastDP
, SlowerDP
a SlowestDP
.
Get Accessor of FastDP
vrátí hodnotu datového členu _fastDP
.
Získání přístupového objektu SlowerDP
čekání po dobu 3 sekund před vrácením hodnoty datového členu _slowerDP
.
Získání přístupového objektu SlowestDP
čekání po dobu 5 sekund před vrácením hodnoty datového členu _slowestDP
.
Poznámka:
Tento příklad je určen pouze pro demonstrační účely. Pokyny .NET doporučují definovat vlastnosti, které jsou řádově pomalejší než sada polí. Další informace naleznete v tématu Volba mezi vlastnostmi a 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
Vlastnost Text je vázána na výše AsyncDS
pomocí 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>
Když vazební modul zpracovává Binding objekty, začíná prvním Binding, který je vázán na SlowestDP
vlastnost. Při zpracování Binding nevrací hodnotu úspěšně, protože spí po dobu 5 sekund, takže další Binding prvek se zpracuje. Další Binding nevrací hodnotu úspěšně, protože spí po dobu 3 sekund. Vazební modul se pak přesune na další Binding prvek, který je vázán na FastDP
vlastnost. Tím Binding se vrátí hodnota "Fast Value". Teď TextBlock se zobrazí hodnota "Rychlá hodnota".
Po uplynutí 3 sekund vrátí SlowerDP
vlastnost hodnotu Pomalejší hodnota. Potom TextBlock zobrazí hodnotu Pomalejší hodnota.
Po uplynutí 5 sekund SlowestDP
vrátí vlastnost hodnotu "Nejpomalejší hodnota". Tato vazba má nejvyšší prioritu, protože je uvedená jako první. Zobrazí TextBlock se hodnota "Nejpomalejší hodnota".
Přečtěte si PriorityBinding informace o tom, co se považuje za úspěšnou návratovou hodnotu z vazby.
Viz také
.NET Desktop feedback