DataTrigger не запускается при изменении свойства связанной зависимости - PullRequest
2 голосов
/ 01 января 2012

A DataTrigger существует в пределах ControlTemplate

<DataTrigger
    Binding="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, 
              Path=(ui:TreeViewItemHeader.IsDragTarget)}"
    Value="True">
    <Setter TargetName="PART_Content" Property="Foreground" Value="Red" />
</DataTrigger>

Связанное свойство IsDragTarget является вложенным свойством, которое закодировано в пользовательский класс элемента управления:

public static readonly DependencyProperty IsDragTargetProperty = DependencyProperty.RegisterAttached
        ("IsDragTarget", 
        typeof(bool), 
        typeof(TreeViewItemHeader),
        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));

public static void SetIsDragTarget(DependencyObject self, bool value)
{
    self.SetValue(IsDragTargetProperty, value);
}

public static bool GetIsDragTarget(DependencyObject self)
{
    return (bool)self.GetValue(IsDragTargetProperty);
}

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

Выполнено устранение неполадок:

  • В привязку добавлено пустое IValueConverter «возвращаемое значение»; IValueConverter.Convert метод вызывается только один раз.
  • Была выполнена отладка, чтобы убедиться, что значение присоединенного свойства изменилось.
  • Для свойства DataTrigger.Value было установлено False - начальное значение присоединенного свойства; Сеттеры сработали один раз, когда началось управление. Последующие изменения свойства не вызвали DataTrigger.
  • Окно вывода Visual Studio не содержит предупреждений о выражениях привязки.

Ответы [ 3 ]

3 голосов
/ 01 января 2012

Это строгое требование для использования DataTrigger?У меня все работает, переключившись на Trigger:

<Trigger Property="ui:TreeViewItemHeader.IsDragTarget" Value="True">
    <Setter TargetName="PART_Content" Property="Foreground" Value="Red" />
</Trigger>

Не знаю, почему DataTrigger не работает, хотя.

0 голосов
/ 01 января 2012

Разве геттер и сеттер не должны быть определены примерно так:

public static readonly DependencyProperty IsDragTargetProperty = DependencyProperty.RegisterAttached
        ("IsDragTarget",
        typeof(bool),
        typeof(TreeViewItemHeader),
        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));

public bool IsDragTarget {
            get { return (bool)this.GetValue(IsDragTargetProperty); }
            set { this.SetValue(IsDragTargetProperty, value); }
        }
0 голосов
/ 01 января 2012

вам необходимо повысить события изменения значения свойства путем реализации интерфейса INotifyPropertyChanged

Как показано в здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...