Procedura: implementare un oggetto PriorityBinding
PriorityBinding in Windows Presentation Foundation (WPF) funziona specificando un elenco di associazioni. L'elenco delle associazioni viene ordinato dalla priorità più alta alla priorità più bassa. Se l'associazione con priorità più alta restituisce correttamente un valore quando viene elaborato, non è mai necessario elaborare le altre associazioni nell'elenco. Potrebbe trattarsi del caso in cui l'associazione con priorità più alta richiede molto tempo per essere valutata, la successiva priorità più alta che restituisce correttamente un valore verrà usata fino a quando un'associazione con priorità più alta restituisce correttamente un valore.
Esempio
Per illustrare il funzionamentoPriorityBinding, l'oggetto AsyncDataSource
è stato creato con le tre proprietà seguenti: FastDP
, e .SlowestDP
SlowerDP
La funzione di accesso get di FastDP
restituisce il valore del _fastDP
membro dati.
La funzione di accesso get di SlowerDP
attende 3 secondi prima di restituire il valore del _slowerDP
membro dati.
La funzione di accesso get di SlowestDP
attende 5 secondi prima di restituire il valore del _slowestDP
membro dati.
Nota
Questo esempio viene fornito solo per scopi dimostrativi. Le linee guida .NET consigliano di definire le proprietà che sono ordini di grandezza più lente rispetto a un set di campi. Per altre informazioni, vedere Scelta tra proprietà e metodi.
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 proprietà viene associata all'oggetto precedente AsyncDS
usando 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 Binding oggetti, inizia con il primo Binding, associato alla SlowestDP
proprietà . Quando viene Binding elaborato, non restituisce correttamente un valore perché è in sospensione per 5 secondi, quindi viene elaborato l'elemento successivo Binding . Il successivo Binding non restituisce un valore correttamente perché è in sospensione per 3 secondi. Il motore di associazione passa quindi all'elemento successivo Binding , associato alla FastDP
proprietà . Verrà Binding restituito il valore "Fast Value". Ora TextBlock viene visualizzato il valore "Fast Value".
Dopo 3 secondi, la SlowerDP
proprietà restituisce il valore "Valore più lento". Viene TextBlock quindi visualizzato il valore "Valore più lento".
Dopo 5 secondi, la SlowestDP
proprietà restituisce il valore "Valore più lento". Tale associazione ha la priorità più alta perché è elencata per prima. Viene TextBlock ora visualizzato il valore "Valore più lento".
Vedere PriorityBinding per informazioni su ciò che viene considerato un valore restituito con esito positivo da un'associazione.
Vedi anche
.NET Desktop feedback
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per