Como implementar PriorityBinding
PriorityBinding no Windows Presentation Foundation (WPF) funciona especificando uma lista de associações. A lista de associações é ordenada da prioridade mais alta para a prioridade mais baixa. Se a associação de maior prioridade retornar um valor com êxito quando ele é processado, nunca haverá a necessidade de processar as outras associações na lista. Pode ser o caso de a associação de maior prioridade levar muito tempo para ser avaliada, a próxima prioridade mais alta que retorna um valor com sucesso será usada até que uma associação de uma prioridade mais alta retorne um valor com êxito.
Exemplo
Para demonstrar como PriorityBinding funciona, o AsyncDataSource
objeto foi criado com as três propriedades a seguir: FastDP
, SlowerDP
e SlowestDP
.
O acessador get de FastDP
retorna o valor do membro de dados _fastDP
.
O acessador get da SlowerDP
aguarda três segundos antes de retornar o valor do membro de dados _slowerDP
.
O acessador get da SlowestDP
aguarda cinco segundos antes de retornar o valor do membro de dados _slowestDP
.
Observação
Este exemplo é para fins de demonstração. As diretrizes do .NET não recomendam a definição de propriedades que são ordens de magnitude mais lentas do que um conjunto de campos seria. Para obter mais informações, consulte Escolhendo entre propriedades e métodos.
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
A Text propriedade se vincula ao acima 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 o mecanismo de vinculação processa os Binding objetos, ele começa com o primeiro Binding, que é vinculado à SlowestDP
propriedade. Quando isso Binding é processado, ele não retorna um valor com êxito porque ele está em suspensão por 5 segundos, portanto, o próximo Binding elemento é processado. O próximo Binding não retorna um valor com êxito porque ele está em suspensão por 3 segundos. Em seguida, o mecanismo de vinculação passa para o próximo Binding elemento, que está vinculado à FastDP
propriedade. Isso Binding retorna o valor "Fast Value". O TextBlock agora exibe o valor "Fast Value".
Depois de 3 segundos, a propriedade SlowerDP
retorna o valor “Valor mais Lento”. O TextBlock então exibe o valor "Valor mais lento".
Depois de 5 segundos, a propriedade SlowestDP
retorna o valor “Valor mais Lento”. Essa associação tem a maior prioridade porque é listada primeiro. O TextBlock agora exibe o valor "Valor mais lento".
Consulte PriorityBinding para obter informações sobre o que é considerado um valor de retorno bem-sucedido de uma associação.
Confira também
.NET Desktop feedback
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de