当值为空时,我可以将TextBox设置为红色,但只有在我单击按钮后才能生成。但是如果没有点击按钮它是空的,我怎么能把它变成红色?
我正在使用MVVM Light,它与“TwoWay”有什么关系?或者RaisePropertyChanged或OnpropertyChanged?
这是我的xaml中的TextBox:
<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");
}
}
答案 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}