我正在使用我的自定义验证引擎来验证我的ViewModel属性。我被困在最后一步。我想在验证失败时更改TextBox
的背景颜色。所以,我实现了DataTrigger
s并将它绑定到HasError属性。 HasError是一个正常的CLR属性。WPF数据触发器和更改控件的样式
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
被分配到一个视图模型将只触发一次。所以,我想也许我可以使用依赖属性而不是普通属性,但是也没有解决。
任何想法?
UPDATE:
这似乎是DataTrigger
s的只有发射时钩住CLR性质,而不是依赖属性。
更新2:
如果只有下面的代码工作:
****<Trigger Property="{Binding Path=HasError}" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>****
UPDATE 3个工作:
正如答复中提到我不得不解雇了INotifyPropertyChanged
事件。
公共 的ObservableCollection 错误 { {返回(的ObservableCollection)的GetValue(ErrorsProperty); } 设置 { 的SetValue(ErrorsProperty,值);
OnPropertyChanged("HasError"); } }
哦,你是救世主!太感谢了。我更新了代码以反映更改。 – azamsharp 2010-01-29 16:23:48
在我的代码中发现了一个错误。所有的属性都依赖于Errors集合。这意味着如果在错误收集中存在单个条目,则全部为红色。 – azamsharp 2010-01-29 16:43:02