Состояние получения привязки isAsync WPF

Я использую свойство Binding IsAsync для сохранения пользовательского интерфейса и загрузки данных из метода доступа get свойства и оказался хорошим вариантом при использовании MVVM. Этот подход великолепен и не требует ручного кода для асинхронных операций. Есть несколько случаев, когда моя загрузка данных занимает несколько секунд, и в течение этого времени очень трудно отличить "нет данных" от "загрузки данных". Есть ли свойство, которое я могу определить состояние привязки "IsBusy" или " Loading", чтобы я мог показать какое-то сообщение о том, что операция загрузки не завершена?

любая помощь приветствуется.

2 ответов


согласно docs,

ожидая прибытия значения, привязка сообщает FallbackValue, если он доступен, или значение по умолчанию целевого свойства привязки.

Это значение можно использовать для отображения сообщения пользователю во время загрузки привязки.


Я знаю, это старая нить. Но если кто-то все еще заинтересован...

вы можете использовать PriorityBinding, есть великолепно объясненный пример в этой статье: http://www.switchonthecode.com/tutorials/wpf-tutorial-priority-bindings

идея состоит в том, чтобы оговорить PriorityBinding, который, в свою очередь, определяет несколько регулярных Привязок, таких как:

  <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
    <TextBlock.Text>
      <PriorityBinding>
        <Binding ElementName="MainWindow" Path="Slow" IsAsync="True" />
        <Binding ElementName="MainWindow" Path="Fast" />
      </PriorityBinding>
    </TextBlock.Text>
  </TextBlock>

порядок Привязок определяет приоритет, с наивысшим приоритетом в первую очередь. В в этом случае быстрая привязка (самый низкий приоритет) немедленно заполнит textblock, потому что у вас может быть привязка к строковому свойству "загрузка"..."или" сортировка..."в зависимости от того, что происходит в данный момент, и задержки нет.

но позже, когда свойство медленной асинхронной привязки возвращает значение, оно имеет более высокий приоритет, что означает, что оно возьмет верх, поскольку оно находится ранее в списке, и его результаты будут связаны, показывая фактические результаты.

Если вам нужно заполнить всплывающее окно прогресса вы можете реализовать это в геттере связанного свойства В вашей ViewModel, хотя я не пробовал ничего подобного.