Procedura: implementare un oggetto PriorityBinding
Il funzionamento di PriorityBinding in Windows Presentation Foundation (WPF) è basato sulla specifica di un elenco di associazioni. L'elenco di associazioni è ordinato dalla priorità più elevata a quella meno elevata. Se l'associazione con la priorità più elevata restituisce correttamente un valore durante la relativa elaborazione, non sarà necessario elaborare le altre associazioni in elenco. Nel caso in cui l'associazione con la priorità più elevata richieda tempi lunghi per la relativa valutazione, verrà utilizzata la priorità immediatamente successiva che restituisce correttamente un valore, finché un'associazione con priorità più elevata non restituisce a sua volta un valore corretto.
Esempio
Per mostrare il funzionamento di PriorityBinding, è stato creato l'oggetto AsyncDataSource con le seguenti tre proprietà: FastDP, SlowerDP e SlowestDP.
La funzione di accesso get di FastDP restituisce il valore del membro dati _fastDP.
La funzione di accesso get di SlowerDP rimane in attesa per 3 secondi prima di restituire il valore del membro dati _slowerDP.
La funzione di accesso get di SlowestDP rimane in attesa per 5 secondi prima di restituire il valore del membro dati _slowestDP.
Nota |
---|
Questo esempio viene riportato a scopo puramente dimostrativo.Nelle linee guida di Microsoft .NET si consiglia di non definire le proprietà che risultino notevolmente più lente rispetto a un insieme di campi.Per ulteriori informazioni, vedere Scelta tra proprietà e metodi. |
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
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; }
}
}
La proprietà Text viene associata all'oggetto AsyncDS indicato in precedenza tramite 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>
Quando il motore di associazione elabora gli oggetti Binding, inizia dal primo oggetto Binding associato alla proprietà SlowestDP. Durante l'elaborazione, tale oggetto Binding non restituisce correttamente alcun valore perché rimane inattivo per 5 secondi; viene quindi elaborato l'elemento Binding successivo. L'oggetto Binding successivo, a sua volta, non restituisce correttamente alcun valore, perché rimane inattivo per 3 secondi. Il motore di associazione passa quindi all'elemento Binding successivo, associato alla proprietà FastDP. Tale oggetto Binding restituisce il valore "Fast Value". Nell'oggetto TextBlock viene ora visualizzato il valore "Fast Value".
Trascorsi 3 secondi, la proprietà SlowerDP restituisce il valore "Slower Value". Nell'oggetto TextBlock viene quindi visualizzato il valore "Slower Value".
Trascorsi 5 secondi, la proprietà SlowestDP restituisce il valore "Slowest Value". Tale associazione ha la priorità più elevata perché viene visualizzata per prima nell'elenco. Nell'oggetto TextBlock viene ora visualizzato il valore "Slowest Value".
Per informazioni sulla definizione di valore restituito correttamente da un'associazione, vedere PriorityBinding.
Vedere anche
Riferimenti
Concetti
Cenni preliminari sull'associazione dati