Триггеры данных WPF и изменение стиля элемента управления

Я использую свой собственный механизм проверки для проверки своих свойств ViewModel. Я застрял на последнем этапе. Я хочу изменить цвет фона TextBox в случае сбоя проверки. Итак, я реализовал DataTriggers и привязал его к свойству 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 {получить {return (ObservableCollection) GetValue (ErrorsProperty); } set {SetValue (ErrorsProperty, значение);

            OnPropertyChanged("HasError");

        }
    }

person azamsharp    schedule 29.01.2010    source источник


Ответы (1)


Система WPF никогда не узнает, что ваше свойство HasError изменилось, поэтому оно срабатывает только один раз. Один из методов достижения этого - реализация INotifyPropertyChanged и запуск PropertyChanged событий при изменении набора ошибок.

person Yuriy Zanichkovskyy    schedule 29.01.2010
comment
О, ты спаситель! Бесконечно благодарен. Я обновил код, чтобы отразить изменения. - person azamsharp; 29.01.2010
comment
А нашел ошибку в моем коде. Все свойства зависят от коллекции ошибок. Это означает, что все окрашено в красный цвет, если в коллекции ошибок есть одна запись. - person azamsharp; 29.01.2010