Comment : implémenter PriorityBinding
PriorityBinding Dans Windows Presentation Foundation (WPF) fonctionne en spécifiant une liste de liaisons. La liste des liaisons est triée de priorité la plus élevée vers la priorité la plus basse. Si la liaison de priorité la plus élevée retourne une valeur correctement lorsqu’elle est traitée, il n’est jamais nécessaire de traiter les autres liaisons de la liste. Il peut s’agir du cas où la liaison de priorité la plus élevée prend beaucoup de temps pour être évaluée, la priorité la plus élevée suivante qui retourne une valeur correctement sera utilisée jusqu’à ce qu’une liaison d’une priorité plus élevée retourne une valeur correctement.
Exemple
Pour illustrer le PriorityBinding fonctionnement, l’objet AsyncDataSource
a été créé avec les trois propriétés suivantes : FastDP
, SlowerDP
et SlowestDP
.
L’accesseur get de FastDP
retourne la valeur du _fastDP
membre de données.
Accesseur get des SlowerDP
attentes pendant 3 secondes avant de retourner la valeur du _slowerDP
membre de données.
Accesseur get des SlowestDP
attentes pendant 5 secondes avant de retourner la valeur du _slowestDP
membre de données.
Remarque
Cet exemple est fourni à des fins de démonstration uniquement. Les instructions .NET recommandent de définir des propriétés qui sont des ordres de grandeur plus lents qu’un ensemble de champs serait. Pour plus d’informations, consultez Choisir entre les propriétés et les méthodes.
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
La Text propriété est liée à l’utilisation ci-dessus AsyncDS
à l’aide PriorityBindingde :
<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>
Lorsque le moteur de liaison traite les Binding objets, il commence par le premier Binding, qui est lié à la SlowestDP
propriété. Binding Lorsqu’elle est traitée, elle ne retourne pas de valeur correctement, car elle est en veille pendant 5 secondes, de sorte que l’élément suivant Binding est traité. La suivante Binding ne retourne pas de valeur correctement, car elle est en veille pendant 3 secondes. Le moteur de liaison se déplace ensuite sur l’élément suivant Binding , qui est lié à la FastDP
propriété. Cette opération Binding renvoie la valeur « Valeur rapide ». La TextBlock valeur « Valeur rapide » s’affiche maintenant.
Après 3 secondes écoulées, la SlowerDP
propriété retourne la valeur « Valeur plus lente ». La TextBlock valeur « Valeur plus lente » s’affiche ensuite.
Après 5 secondes écoulées, la SlowestDP
propriété retourne la valeur « Valeur la plus lente ». Cette liaison a la priorité la plus élevée, car elle est répertoriée en premier. La TextBlock valeur « Valeur la plus lente » s’affiche maintenant.
Pour PriorityBinding plus d’informations sur ce qui est considéré comme une valeur de retour réussie à partir d’une liaison.
Voir aussi
.NET Desktop feedback