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

时间:2015-10-15 15:06:48

标签: c# xaml data-binding mvvm-light

当值为空时,我可以将TextBox设置为红色,但只有在我单击按钮后才能生成。但是如果没有点击按钮它是空的,我怎么能把它变成红色?

我正在使用MVVM Light,它与“TwoWay”有什么关系?或者RaisePropertyChanged或OnpropertyChanged?

这是我的xaml中的T​​extBox:

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

这是我的ViewModel上的代码:

 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);
                //....      
            });
        }
    }

所以我想要的是,当FirstName TextBox为空时,边框变为红色,这不会点击按钮。

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

2 个答案:

答案 0 :(得分:2)

如果您只想要重置所有不包含任何值的字段,则可以使用此

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

答案 1 :(得分:0)

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

修改1

在回复您的评论时,我建议您在ViewModel中实现FirstName属性,如下所示:

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

然后在View中,Text属性的绑定看起来像这样:

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

而不是

{Binding SelectedPerson.FirstName, Mode=TwoWay}