Show / Hide Table of Contents

Практическое руководство. Реализация PriorityBinding

PriorityBinding в Windows Presentation Foundation (WPF) работает путем указания списка привязок. Список привязок упорядочен от наиболее важных к наименее важным. Если привязка наивысшего приоритета возвращает значение успешно при его обработке то нет необходимости обрабатывать другие привязки в списке. Возможно, что привязка наивысшего приоритета занимает много времени для оценки, будет использоваться самым высоким приоритетом, которое возвращает значение успешно, пока не будет успешно возвращает значение привязки более высокий приоритет.

Пример

Чтобы продемонстрировать, как PriorityBinding работает, AsyncDataSource объект создан со следующими тремя свойствами: FastDP, SlowerDP, и SlowestDP.

Метод доступа get FastDP возвращает значение _fastDP элемент данных.

Метод доступа get SlowerDP ожидает в течение 3 секунд перед возвратом значения _slowerDP элемента данных.

Метод доступа get SlowestDP ожидает в течение 5 секунд перед возвратом значения _slowestDP элемента данных.

Note

Этот пример приведен только в качестве демонстрации. Microsoft .NET Правила рекомендованы для определения свойств, которые являются порядков медленнее, чем мог бы быть набор полей. Дополнительные сведения см. в разделе Выбор между свойствами и методами.

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; }
  }
}

Text Свойство привязывается к выше AsyncDS с помощью 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>

Когда обработчик привязки обрабатывает Binding объектов, он начинается с первого Binding, который привязан к SlowestDP свойство. Когда это Binding является обработки, он не возвращает значение успешно, так как он находится в спящем режиме на 5 секунд, поэтому следующий Binding обработки элемента. Следующий Binding не успешного возвращения значения, так как он находится в спящем режиме в течение 3 секунд. Затем обработчик привязки перемещается к следующему Binding элемент, который привязан к FastDP свойство. Это Binding возвращает значение «Fast Value». TextBlock Теперь отображается значение «Fast Value».

По прошествии 3 секунд SlowerDP свойство возвращает значение «Медленнее Value». TextBlock Отображает значение «Медленнее Value».

По прошествии 5 секунд SlowestDP свойство возвращает значение «Самые медленные Value». Эта привязка имеет наивысший приоритет, поскольку он указывается в первую очередь. TextBlock Теперь отображается значение «Самые медленные Value».

См. в разделе PriorityBinding сведения о того, что считается успешной возвращаемое значение из привязки.

См. также

  • Binding.IsAsync
  • Общие сведения о привязке данных
  • Практические руководства
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX