Состояние получения привязки isAsync WPF
Я использую свойство Binding IsAsync для сохранения пользовательского интерфейса и загрузки данных из метода доступа get свойства и оказался хорошим вариантом при использовании MVVM. Этот подход великолепен и не требует ручного кода для асинхронных операций. Есть несколько случаев, когда моя загрузка данных занимает несколько секунд, и в течение этого времени очень трудно отличить "нет данных" от "загрузки данных". Есть ли свойство, которое я могу определить состояние привязки "IsBusy" или " Loading", чтобы я мог показать какое-то сообщение о том, что операция загрузки не завершена?
любая помощь приветствуется.
2 ответов
ожидая прибытия значения, привязка сообщает 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, хотя я не пробовал ничего подобного.