la force de zone de texte pour actualiser
J'ai un normal wpf contrôle de zone de texte lié à une propriété de type chaîne. J'ai besoin de le texte affiché à être mis à jour immédiatement après la liaison ou l' .Texte de propriété est mise à jour. J'ai essayé
((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateTarget();
dans l'événement TextChanged gestionnaire.
J'ai essayé UpdateSourceTrigger=Explicit
sur la liaison. J'ai essayé
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Input,
new Action(() =>
{
statusTextBox.Text = "newValue";
}));
et de nombreuses combinaisons différentes de ces. Mais le texte est affichée qu'une seule fois la méthode que j'ai mise à jour de la zone de texte de sortie.
XAML:
<TextBox x:Name="txBox" Height="150" Margin="0,0,0,0" VerticalAlignment="Top" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" AcceptsReturn="True" VerticalContentAlignment="Top" Text="{Binding TextProperty}"Width="200" />
Quel est votre XAML?
ajouté XAML
Pourquoi vous mettez-vous
Élever un
C'est juste une de mes nombreuses tentatives pour obtenir l'affichage de la valeur à modifier. En fait j'utilise la liaison.
ajouté XAML
Pourquoi vous mettez-vous
statusTextBox.Text = "newValue"
lorsque vous avez lié le texte d'une propriété?Élever un
OnPropertyChanged
événement sur TextProperty
et UpdateSourceTrigger=PropertyChanged
devrait être suffisante pour cela. Avez-vous essayé ces approches?C'est juste une de mes nombreuses tentatives pour obtenir l'affichage de la valeur à modifier. En fait j'utilise la liaison.
OriginalL'auteur user1151923 | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
votre méthode si elle fait beaucoup de travail est probablement la tenue le thread d'INTERFACE utilisateur () l'ordre d'exécution). Ce que vous faites dans la méthode - faire dans le thread d'arrière-plan.
Assurez-vous juste que si dans la méthode, vous êtes de toucher tous les éléments de l'INTERFACE utilisateur, vous le faites sur le thread de l'INTERFACE utilisateur, sinon vous obtiendrez un crash. Un autre, peut-être un meilleur moyen de laisser thread de l'INTERFACE utilisateur de savoir est pour RaisePropertyChanged que vous souhaitez la liaison de connaître, au lieu de manipuler directement l'élément d'INTERFACE utilisateur.
C'est génial! Alors tout ce que vous avez à faire est d'envelopper les choses que les sangliers votre méthode de la chaîne de l'exécution de la tâche et de mettre à jour la propriété que votre statusTextBox est lié à ce dernier. Elle sera mise à jour immidiately - avant la méthode est fait son exection.
J'ai trouvé une autre bonne solution ici: dedjo.blogspot.dk/2007/08/how-to-doevents-in-wpf.html
oh, oui, c'est une autre façon de libérer le thread d'INTERFACE utilisateur. J'ai l'habitude de l'utiliser seulement quand je ne peux pas contrôler/faire autre chose. Par exemple, la grille de données de chargement lent, donc, je voudrais séparer chaque ligne de chargement et de la fonction DoEvents() entre, lui donnant un effet de cascade pour le déploiement de lignes. Ici, il semble plus simple d'utiliser des tâches, mais c'est à vos préférences. Prendre soin.
OriginalL'auteur denis morozov
Vous devez utiliser la liaison Bidirectionnelle au lieu de changer la zone de texte valeur de la expicitly et vous avez besoin pour mettre en œuvre les INotifyPropertyChanged sur les bindings de données de la classe.
TwoWay
que c'est la valeur par défaut pourTextBox
. Mais oui, le réel réponse estINotifyPropertyChanged
OriginalL'auteur recurzive
Essayez la séquence de code suivante, il a travaillé pour moi-
OriginalL'auteur Croko