8

ユーザーの姓名用に 2 つのテキスト ボックスがあり、テキストが特定の文字列に等しい場合にテキスト ボックスの背景色を変更するコンバーターを作成しました。私が抱えている問題は、テキストボックスが実行時にのみ更新され、テキストをテキストボックスに変更しても更新されないことです。

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"/>

コンバーターコード:

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;
    }
}

正しいテキスト入力:

正しいテキスト入力

間違ったテキスト入力 - 変更なし:

間違ったテキスト入力 - 変化なし

4

3 に答える 3

2

に追加する必要がありUpdateSourceTrigger=PropertyChangedますBinding:

<TextBox x:Name="forenameTextBox" Grid.Column="1" HorizontalAlignment="Left" 
    Height="23" Margin="3" Grid.Row="1" Background="{Binding Staff, 
    UpdateSourceTrigger=PropertyChanged, Converter ={StaticResource 
    StaffNameToBackgroundColourConverter1}}" Text="{Binding Staff.Forename, 
    Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" 
    VerticalAlignment="Center" Width="120"/>

<TextBox x:Name="surnameTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" 
    Margin="3" Grid.Row="2" Background="{Binding Staff, 
    UpdateSourceTrigger=PropertyChanged, Converter={StaticResource 
    StaffNameToBackgroundColourConverter1}}" Text="{Binding Staff.Surname, Mode=TwoWay, 
    NotifyOnValidationError=true, ValidatesOnExceptions=true}" 
    VerticalAlignment="Center" Width="120"/>

これにより、ユーザーが文字を入力するたびにバインディング ソースが更新されます。詳細については、MSDN のBinding.UpdateSourceTrigger プロパティページを参照してください。

于 2013-09-12T15:19:08.250 に答える
1

まず、UpdateSourceTrigger=PropertyChanged間違ったバインディングに を追加しました。プロパティのバインディングに追加する必要がありTextます。

次に、Textプロパティを toStaff.Forename以外にバインドしBackgroundましたStaff。プロパティは、書き込み時に変更されたことをBackground知りません。プロパティに書き込むときは、プロパティのイベントを発生させる必要があります。についても同じです。StaffStaff.ForenamePropertyChangedStaffStaff.ForenameStaff.Surname

于 2014-10-22T11:29:39.433 に答える