2012-06-20 36 views
1

我正在使用MVVM模型。在DataTrigger中的故事板在RaisePropertyChanged事件中不會觸發多次

我有一個依賴屬性,一個布爾值,稱爲「ResultOfUpdate」。每當用戶嘗試運行命令時都會更改它。

在這個依賴屬性的設置器中,我在屬性名稱上調用「RaisePropertyChanged()」方法。

它綁定到DataTrigger像這樣:

<DataTrigger Binding="{Binding ResultOfUpdate}" Value="True"> 
    <DataTrigger.EnterActions> 
     <BeginStoryboard> 
      <Storyboard> 
       <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Opacity)" 
               AutoReverse="True"> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.1" Value="0.1"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.2" Value="0.2"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="0.3"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.4" Value="0.4"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.5" Value="0.5"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.6" Value="0.6"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.7" Value="0.7"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.8" Value="0.8"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.9" Value="0.9"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.1" Value="1"/> 
        <DiscreteDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/> 
       </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </DataTrigger.EnterActions> 
</DataTrigger> 

...

<TextBlock Style="{StaticResource statusStyle}" 
      Opacity="0" Text="Results updated!"  
      FontSize="10" FontFamily="Segoe UI"/> 

我希望每個這種bool設置爲true的時間,故事板被播放。

令人困惑的是,當用戶第一次運行命令並將dependecy屬性更新爲true時,會正確觸發故事板。

隨後的嘗試發現輸入了依賴屬性設置程序代碼,並調用RaisePropertyChanged()方法 - 但故事板不再播放。

我在這裏做了什麼不對?

+0

如關於構造以前的行爲已更新的問題是因爲我的結果留在構造函數的方法! –

+0

是否已將值設置回false,以便發生變化?否則,只要不斷地將屬性設置爲'true',我不認爲會得到您期望的效果。 – Josh

+0

不幸的是,我也希望當屬性設置爲false時讓屬性反應。我曾考慮過使用枚舉來解決這個問題,但這不值得付出努力(這似乎相當困難!)。是否有可能將其設置爲null或者類似的東西? –

回答

2

你可能使用一個事件觸發這樣的:

<StackPanel> 
    <TextBlock Text="I'm a text block" Name="theTextBlock"/> 
    <Button Name="BeginButton">Begin</Button> 
    <StackPanel.Triggers> 
     <EventTrigger RoutedEvent="Button.Click" SourceName="BeginButton"> 
      <BeginStoryboard Name="MyBeginStoryboard"> 
       <Storyboard> 
        <DoubleAnimation 
         Storyboard.TargetName="theTextBlock" 
         Storyboard.TargetProperty="(TextBlock.Opacity)" 
         From="0.0" To="1.0" AutoReverse="True" Duration="0:0:1"/> 
        </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </StackPanel.Triggers> 
</StackPanel>