Триггеры данных WPF и изменение стиля элемента управления - PullRequest
1 голос
/ 29 января 2010

Я использую свой пользовательский механизм проверки для проверки моих свойств 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 назначен для модели вида. Итак, я подумал, что, может быть, я смогу использовать свойство зависимости вместо обычного свойства, но это тоже не сработало.

Есть идеи?

ОБНОВЛЕНИЕ:

Кажется, что 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 Ответ

1 голос
/ 29 января 2010

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

...