我正在使用自定义验证引擎来验证我的ViewModel属性。我陷入了最后一步。我想在验证失败时更改TextBox
的背景颜色。因此,我实现了DataTrigger
并将其绑定到HasError属性。 HasError是一个普通的CLR属性。
public bool HasError
{
get
{
var hasError = Errors.Count() > 0;
return hasError;
}
}
以下是代码:
<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasError}" Value="True">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
问题是,当this.DataContext
被分配给视图模型时,它只会被触发一次。所以,我想也许我可以使用Dependency Property而不是普通的属性,但这也没有成功。
有什么想法吗?
更新:
似乎DataTrigger
仅在挂接到CLR属性而不是依赖属性时被触发。
更新2:
如果只有以下代码有效:
****<Trigger Property="{Binding Path=HasError}" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>****
更新3工作:
如上所述,我不得不解雇INotifyPropertyChanged
事件。
公共 的ObservableCollection 错误 { get {return(ObservableCollection)GetValue(ErrorsProperty); } 组 { SetValue(ErrorsProperty,value);
OnPropertyChanged("HasError"); } }
答案 0 :(得分:1)
WPF系统永远不会知道您的HasError
属性发生了变化,这就是为什么它只会触发一次。实现此目标的方法之一是在错误集合发生更改时实施INotifyPropertyChanged
并触发PropertyChanged
事件。