WPF数据触发和更改控件的样式

时间:2010-01-29 16:06:22

标签: wpf datatrigger

我正在使用自定义验证引擎来验证我的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");

        }
    }

1 个答案:

答案 0 :(得分:1)

WPF系统永远不会知道您的HasError属性发生了变化,这就是为什么它只会触发一次。实现此目标的方法之一是在错误集合发生更改时实施INotifyPropertyChanged并触发PropertyChanged事件。