Документация по Avalonia UI
< Все темы
Печать

Привязка к Tasks и Observables

Вы можете подписаться на результат задачи или наблюдаемый объект с помощью оператора привязки потока ^.

Пример 1: привязка к наблюдаемому

Например, если DataContext.Name является IObservable<string>, то следующий пример будет привязан к длине каждой строки, создаваемой наблюдаемым объектом, при создании каждого значения.

<TextBlock Text="{Binding Name^.Length}"/>

Пример 2: Привязка к задаче

Если вам нужно выполнить тяжелую работу, чтобы загрузить содержимое свойства, вы можете привязать его к результату асинхронного async Task<TResult>.

Предположим, у вас есть следующая модель представления, которая генерирует некоторый текст в длительном процессе:

public Task<string> MyAsyncText => GetTextAsync();

private async Task<string> GetTextAsync()
{
  await Task.Delay(1000); // The delay is just for demonstration purpose
  return "Hello from async operation";
}

Вы можете привязаться к результату следующим образом:

<TextBlock Text="{Binding MyAsyncText^, FallbackValue='Wait a second'}" />

Примечание. Вы можете использовать FallbackValue для отображения некоторого индикатора загрузки.

Оглавление