WPF convertisseur de mise à jour en temps réel de la couleur de fond de la zone de texte sur le changement de texte
J'ai deux zones de texte pour le prénom et le nom d'un utilisateur et j'ai créé un convertisseur pour changer la couleur de fond de la zone de texte lorsque le texte est égal à une chaîne spécifique. Le problème que j'ai est que la zone de texte n'est mis à jour au moment de l'exécution et ne met pas à jour lorsque je modifie le texte de la textbox.
XAML:
<TextBox x:Name="forenameTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="1"
Background="{Binding Staff,Converter ={StaticResource StaffNameToBackgroundColourConverter1}}"
Text="{Binding Staff.Forename, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
<Label Content="Surname:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="2" VerticalAlignment="Center"/>
<TextBox x:Name="surnameTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="2"
Background="{Binding Staff,Converter={StaticResource StaffNameToBackgroundColourConverter1}}"
Text="{Binding Staff.Surname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
Convertisseur de code:
public class StaffNameToBackgroundColourConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var staff = (Staff) value;
if (staff.Forename == "Donald" && staff.Surname == "Duck")
{
return "Yellow";
}
else
{
return "White";
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
Corriger la saisie de texte:
Mal saisie de texte - pas de changement:
Votre problème vient du fait que
Staff
n'est pas notifié d'une mise à jour. Staff.Forename
et Staff.Surname
de la mise à jour, mais cela ne signifie pas automatiquement que Staff
mises à jour. Si vous placez un point d'arrêt dans votre convertisseur, je pense que vous verrez qu'il n'est jamais atteint lorsque vous commencez à taper dans vos zones de texte. Votre convertisseur est très bien, le problème est dans les données pour lesquelles vos zones de texte sont liés.OriginalL'auteur NigelMassey | 2013-09-12
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter
UpdateSourceTrigger=PropertyChanged
à votreBinding
:Ce sera la mise à jour de la source de liaison comme les types d'utilisateurs de chaque lettre. Vous pouvez en savoir plus à partir de la De liaison.UpdateSourceTrigger Propriété page sur le site MSDN.
Je ne sais pas trop quoi vous dire. Cette propriété fait ce que vous avez demandé... peut-être que vous devriez l'essayer sur une simple liaison ou de lire la page du lien pour voir par vous-même.
OriginalL'auteur Sheridan
Tout d'abord, vous avez ajouté le
UpdateSourceTrigger=PropertyChanged
à la mauvaise liaison. Vous devez l'ajouter à la liaison de laText
propriété.Second, lié à la
Text
propriétéStaff.Forename
mais laBackground
àStaff
. LeBackground
propriété ne sait pas queStaff
a changé, lorsque vous écrivez enStaff.Forename
. Vous avez à soulever laPropertyChanged
événement pour leStaff
propriété lorsque vous écrivez dans leStaff.Forename
de la propriété. De même pourStaff.Surname
.OriginalL'auteur Mardukar
Vous devez revenir à la brosse objet que de couleurs d'arrière-plan comme ci-dessous
OriginalL'auteur TRS