Compartilhar via


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çãoObservaçã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

Referência

Binding.IsAsync

Outros recursos

Exemplos de ligação de dados

Data Binding How-to Topics