2013-06-27 1 views
1

У меня есть пользовательский элемент управления со стилем. Управления привязаны к собственности в моем ViewModelWPF привязка к родительскому контенту в datatrigger

<controls:PromoAlarmBox Content="{Binding Controller.IOGRP1W.Value}"/> 

Я хочу создать DataTrigger, который меняет цвет элемента управления в зависимости от связанного значения, и это работает

<Style TargetType="{x:Type local:PromoAlarmBox}">   
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ContentControl"> 
        <Rectangle x:Name="PART_rectangle" VerticalAlignment="Stretch" Fill="Yellow" Stroke="Black" Height="20" Width="20"/> 

        <ControlTemplate.Triggers> 
          <DataTrigger Binding="{Binding Controller.IOGRP1W.Value, UpdateSourceTrigger=PropertyChanged}" Value="1"> 

          <Setter Property="Fill" TargetName="PART_rectangle" Value="Red" /> 

         </DataTrigger> 
        </ControlTemplate.Triggers>  
       </ControlTemplate> 
      </Setter.Value> 
     </Setter>   
    </Style> 

До сих пор так хорошо. Я могу заставить его работать, если я ссылаюсь на то же свойство в datatrigger, с которым связан контроль. Моя проблема заключается в том, что у меня есть несколько экземпляров одного и того же элемента управления, связанного с разными значениями, и я не хочу создавать новый стиль для каждого из них, поэтому мой вопрос заключается в том, как я могу привязать к связанному значению элемента управления в datatrigger ,

ответ

-1

Вы должны использовать PriorityBinding для достижения целевого поведение на

0

Может быть, вы могли бы попробовать это:

<ControlTemplate.Triggers> 
    <Trigger Property="Content" Value="1"> 
     <Setter Property="Fill" TargetName="PART_rectangle" Value="Red" /> 
    </Trigger> 
</ControlTemplate.Triggers> 

Таким образом Trigger должен связываться с Content свойством PromoAlarmBox.

+0

Извините, я ответил на свой вопрос одновременно с вами. Твой, похоже, тоже работает, поэтому я проверю его как ответ. Спасибо – klashagelqvist

+0

Извините, я был быстр, выше ответа не работает для меня, кажется, что он должен быть датапримгером – klashagelqvist

0

Найдено. Любовь WPF, но кажется, что вы можете проводить недели, просто изучая разные выражения привязки.

<DataTrigger Binding="{Binding Path=Content, RelativeSource={RelativeSource Mode=Self}}" Value="1">