WPF-Konverter-update in Echtzeit Hintergrundfarbe der textbox auf text ändern
Habe ich zwei Textfelder für Vorname und Nachname des Benutzers und die ich erstellt habe, einen Konverter-ändern Sie die Hintergrundfarbe der textbox, wenn der text entspricht einer bestimmten Zeichenfolge. Das problem, das ich habe ist, dass das Textfeld nur zu aktualisieren, die zur Laufzeit und wird nicht aktualisiert, wenn ich den text der 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"/>
Converter 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;
}
}
Richtigen text input:
Falsche text - Eingabe- keine änderung:
- Dein problem kommt von der Tatsache, dass
Staff
ist nicht die Benachrichtigung zu aktualisieren.Staff.Forename
undStaff.Surname
aktualisieren, aber das bedeutet nicht automatisch, dassStaff
updates. Wenn Sie einen Haltepunkt in Ihrem Konverter, ich denke, Sie werden sehen, dass es nie erreicht, wenn Sie mit der Eingabe beginnen in Ihren Textboxen. Dein Konverter ist in Ordnung, das Problem liegt in den Daten, auf die Sie Ihre Textfelder sind gebunden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
UpdateSourceTrigger=PropertyChanged
zu IhremBinding
:Aktualisieren Sie die verbindliche Quelle als der Benutzer tippt jeden Buchstaben. Sie können herausfinden, mehr von der Die Bindung.UpdateSourceTrigger-Eigenschaft Seite auf MSDN.
Sollten Sie wieder einige brush-Objekt als Farben für hintergrund, wie unten
Ersten, die Sie Hinzugefügt, die
UpdateSourceTrigger=PropertyChanged
an den falschen binden. Sie müssen es hinzufügen, um die Bindung derText
Eigenschaft.Sekunde, die du gebunden die
Text
EigenschaftStaff.Forename
aber dieBackground
zuStaff
. DieBackground
Eigenschaft nicht wissen, dassStaff
verändert hat, wenn Sie schreiben inStaff.Forename
. Sie haben zu erhöhen, diePropertyChanged
Ereignis für dieStaff
- Eigenschaft, wenn Sie schreiben in derStaff.Forename
Eigenschaft. Gleiche fürStaff.Surname
.