Я знаю, это старая нить.Но если кому-то все еще интересно ...
Вы можете использовать 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>
Порядок привязок определяет приоритет, с наивысшим приоритетом в первую очередь.В этом случае Быстрая привязка (самый низкий приоритет) немедленно заполнит текстовый блок, потому что вы можете привязать его к строковому свойству «Загрузка ...» или «Сортировка ...» в зависимости от того, что происходит в данный момент, и естьбез задержки.
Но позже, когда свойство медленной асинхронной привязки возвращает значение, его более высокий приоритет означает, что оно вступит во владение, так как оно находится раньше в списке, а его результаты будут привязаны вместо этого, показывая реальные результаты..
Если вам нужно заполнить всплывающее окно прогресса, вы можете реализовать это в получателе свойства привязки в вашей ViewModel, хотя я не пробовал ничего подобного.