OK, il existe trois options que vous pouvez utiliser pour rendre l'interface utilisateur réactive :
(1). Utilisez les liaisons asynchrones:
<TextBlock Text="{Binding ViewModelTextProperty, IsAsync=True}"/>
De cette façon, la valeur de ViewModelTextProperty
sera récupéré de manière asynchrone.
(2). Utilisez PriorityBinding
- il est similaire à l'option précédente, mais en outre, il vous permet d'afficher quelque chose en liaison principale est l'exécution de manière asynchrone:
<TextBlock>
<TextBlock.Text>
<PriorityBinding>
<Binding Path="ViewModelTextProperty" IsAsync="True"/>
<Binding Path="FastViewModelTextProperty" IsAsync="True"/>
</PriorityBinding>
</TextBlock.Text>
</TextBlock>
liaisons lentes sont spécifiées sur le dessus et les rapides dans le buttom. C'est-à-dire, dans cet exemple, la valeur de FastViewModelTextProperty
sera affichée en premier et lorsque la valeur de ViewModelTextProperty
est prête, elle sera affichée.
(3). Enfin, vous pouvez utiliser la programmation asynchrone habituelle dans votre modèle de vue (appelez les méthodes de manière asynchrone, utilisez les temporisations, etc.). Et chaque fois que vous êtes prêt à afficher des données, mettre à jour l'interface utilisateur (valeurs de consigne des propriétés liées) en utilisant Dispatcher:
private void OnAsyncOperationCompleted()
{
Application.Current.Dispatcher.BeginInvoke(new Action(() => {
// Update the UI
}));
}
Ce n'est pas exactement ce que vous demandez, mais WPF a quelque chose comme PriorityBinding de sorte que vous pouvez afficher la valeur différente lorsque la liaison lente est en cours de chargement en arrière-plan. Il y a aussi DispatchPriority, donc vous pouvez décider comment l'interface utilisateur rapide recevra des éléments du distributeur. – baalazamon