2012-08-09 222 views
0

下面我有兩個控件模板用作網格中兩個不同列的單元模板。您會注意到兩列都綁定到相同的模型屬性(代碼和值),但使用轉換器以不同方式顯示這些值。當數據改變時,兩個控制模板也使用相同的樣式使單元「閃爍」。當屬性更改時,選擇性地/更新地更新綁定到相同模型屬性的控件

這有效,但不完全是我想要的方式。現在,當Data.Code或Data.Value發生更改時,BOTH列單元格閃爍。我想要的是如果Data.Code ==「CodeA」,那麼使用模板CDisplay2的列不應該閃爍(事實上,它不應該顯示任何東西)。如果Data.Code ==「CodeB」,那麼使用模板CDisplay1的單元不應該閃爍。

爲了達到這個目標,如果我可以有條件地應用基於Data.Code的樣式模板,但是我無法弄清楚如何做到這一點,那就太好了。有關於此的任何想法?我如何有選擇地將樣式應用於綁定到基於特定屬性值的同一模型屬性的多個控件?

<Style x:Key="FlashStyle" TargetType="TextBlock" > 
    <Setter Property="Visibility" Value="Collapsed"/> 
    <Style.Triggers> 
     <EventTrigger RoutedEvent="Binding.TargetUpdated"> 
      <EventTrigger.Actions> 
       <BeginStoryboard> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames RepeatBehavior="4x" Storyboard.TargetProperty="(UIElement.Visibility)"> 
          <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/> 
          <DiscreteObjectKeyFrame KeyTime="0:0:0.4" Value="{x:Static Visibility.Collapsed}"/> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
    </Style.Triggers> 
</Style> 

<ControlTemplate x:Key="CDisplay1" > 
    <Grid> 
     <TextBlock Style="{StaticResource Flash1}" > 
      <TextBlock.Text> 
       <MultiBinding Converter="{StaticResource conv}" ConverterParameter="CodeA" NotifyOnTargetUpdated="True"> 
        <Binding Path="Data.Code" /> 
        <Binding Path="Data.Value" /> 
       </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
    </Grid> 
</ControlTemplate> 
<ControlTemplate x:Key="CDisplay2" > 
    <Grid> 
     <TextBlock Style="{StaticResource Flash1}" > 
      <TextBlock.Text> 
       <MultiBinding Converter="{StaticResource conv}" ConverterParameter="CodeB" NotifyOnTargetUpdated="True"> 
        <Binding Path="Data.Code" /> 
        <Binding Path="Data.Value" /> 
       </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
    </Grid> 
</ControlTemplate> 

回答

0

我用一個觸發器來有條件地設置綁定。這種效果是FlashStyle不會爲兩個控件執行,因爲某些單元格不會被綁定,並且轉換器不會被調用。