当值为空时,通过在 MVVM Light 中使用数据绑定,使文本框边框变为红色

本文关键字:数据绑定 红色 文本 边框 MVVM Light | 更新日期: 2023-09-27 18:17:56

当值为空时,我可以将文本框设置为红色,但只有在我单击按钮之后。但是,如何在不单击按钮的情况下将其变为空时将其变为红色?

我正在使用MVVM Light,它与"双向"有关吗?还是提高属性已更改或属性已更改?

这是我的 xaml 中的一个文本框:

 <TextBox Text="{Binding SelectedPerson.FirstName, Mode=TwoWay}"
                 Width="200"
                 HorizontalAlignment="Left"
                 Background="Grey"
                 Foreground="White"
                 BorderThickness="1"
                 BorderBrush="{Binding Color, Mode=TwoWay}" />

这是我的视图模型上的代码:

 private SolidColorBrush _Color;
    public SolidColorBrush Color
    {
        get
        {
            return _Color;
        }
        set
        {
            _Color = value;
            RaisePropertyChanged("Color");
        }
    }

那么这是按钮命令:

 public RelayCommand UpdatePerson
    {
        get
        {
            return new RelayCommand(async () =>
            {
                Color = new SolidColorBrush(Colors.Red);
                //....      
            });
        }
    }

所以我想要的是,当名字文本框为空时,边框变成红色,而无需单击按钮。

 private Person _SelectedPerson;
    public Person SelectedPerson
    {
        get
        {
            return _SelectedPerson;
        }
        set
        {
            _SelectedPerson = value;
            if (value.FirstName == "")
            {
                Color = new SolidColorBrush(Colors.Red);
            }
            RaisePropertyChanged("SelectedPerson");
        }
    }

当值为空时,通过在 MVVM Light 中使用数据绑定,使文本框边框变为红色

如果您只想将所有不包含任何值的字段进行红色,则可以使用它

<Style.Triggers>
 <Trigger Property="Text" Value="">
 <Setter Property="BorderBrush" Value="Red"></Setter>
 </Trigger>
 </Style.Triggers>

SelectedPerson.FirstName资源库更改Color,并确保在 Text 属性的绑定中将UpdateSourceTrigger设置为 PropertyChanged


编辑 1

为了回应您的评论,我建议您在 ViewModel 中实现一个 FirstName 属性,如下所示:

public String FirstName
{
    get { return SelectedPerson.FirstName; }
    set
    {
        SelectedPerson.FirstName = value;
        // Update 'Color' here
    }
}

然后在视图中,Text属性的绑定将如下所示:

{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}

而不是

{Binding SelectedPerson.FirstName, Mode=TwoWay}