当值为空时,我可以将文本框设置为红色,但只有在我单击按钮之后。但是,如何在不单击按钮的情况下将其变为空时将其变为红色?
我正在使用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");
}
}
如果您只想将所有不包含任何值的字段进行红色,则可以使用它
<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}