1

我正在使用我的自定义验证引擎来验证我的 ViewModel 属性。我被困在最后一步。我想更改TextBox验证失败时的背景颜色。因此,我实现DataTrigger了 s 并将其绑定到 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分配给视图模型时触发一次。所以,我想也许我可以使用依赖属性而不是普通属性,但这也没有成功。

有任何想法吗?

更新:

似乎DataTriggers 仅在挂钩到 CLR 属性而不是依赖项属性时才会触发。

更新 2:

如果只有以下代码有效:

 ****<Trigger Property="{Binding Path=HasError}" Value="True">
                    <Setter Property="Background" Value="Red" />
                </Trigger>****  

更新 3 工作:

正如答案所提到的,我不得不触发这个INotifyPropertyChanged事件。

公共 ObservableCollection 错误 { 获取 { 返回 (ObservableCollection)GetValue(ErrorsProperty); } set { SetValue(ErrorsProperty, value);

            OnPropertyChanged("HasError");

        }
    }
4

1 回答 1

1

WPF 系统永远不会知道您的HasError属性已更改,这就是它只触发一次的原因。实现此目的的方法之一是在错误集合发生更改时实现INotifyPropertyChanged和触发事件。PropertyChanged

于 2010-01-29T16:17:39.577 回答