Como: Implementar PriorityBinding
PriorityBinding em Windows Presentation Foundation (WPF) funciona especificando uma lista de associações. A lista de associações é ordenada da maior prioridade para a menor prioridade. Se a associação de maior prioridade retorna um valor com sucesso quando é processado, então nunca é necessário processar as outras associações na lista. Pode ser o caso que a associação de maior prioridade leva um tempo grande para ser avaliada, a próxima associação de maior prioridade que retorna um valor com sucesso será usada até que uma associação de valor maior retorne um valor com sucesso.
Exemplo
Para demonstrar como PriorityBinding funciona, o AsyncDataSource objeto foi criado com as três seguintes propriedades: FastDP, SlowerDP, e SlowestDP.
O assessor get de um FastDP retorna o valor do membro de dados _fastDP.
O assessor get de SlowerDP espera por 3 segundos antes de retornar o valor do membro de dados _slowerDP.
O assessor get de SlowestDP espera por 5 segundos antes de retornar o valor do membro de dados _slowestDP.
Observação: |
---|
Isso exemplo é apenas para fins de demonstração. O Microsoft .NET diretrizes recomendam contra definindo propriedades que são ordens de magnitude mais lento do que seria um conjunto de campos. Para obter mais informações, consulte Escolhendo entre propriedades e métodos. |
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; }
}
}
A propriedade Text associa o AsyncDS de cima 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 sistema de associação processa os objetos Binding, ele começa com a primeira Binding, que é associado a propriedade SlowestDP. Quando este Binding é processado, ele não retorna um valor com sucesso porque está dormindo por 5 segundos, então o próximo elemento Binding é processado. O próximo Binding não retorna um valor com sucesso porque está dormindo por 3 segundos. O sistema de associações então move para o próximo elemento Binding, que é associado a propriedade FastDP. Este Binding retorna o valor "Fast Value". O TextBlock agora mostra o valor "Fast Value".
Depois de 3 segundos, a propriedade SlowerDP retorna o valor "Slower Value". O TextBlock então mostra o valor "Slower Value".
Depois de 5 segundos, a propriedade SlowestDP retorna o valor "Slowest Value". Aquela associação tem a maior prioridade porque é listada primeiro. O TextBlock agora mostra o valor "Slowest Value".
Consulte PriorityBinding para informações sobre o que é considerado um valor de retorno com sucesso de uma associação.
For the complete sample, see Ligação usando PriorityBinding exemplo.
Consulte também
Conceitos
Revisão de Associação de Dados