2011-09-02 98 views
2

我有如下的故事板的网格。如何刷新wpf数据触发器?

<Grid x:Name="grd_Order" Grid.Column="2" Height="16" Margin="0,-2,0,0" Visibility="Collapsed" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <Grid.Resources> 
    <Storyboard x:Key="stry_OrderMsgShowHide" RepeatBehavior="3x"> 
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Visibility)" > 
     <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/> 
     <DiscreteObjectKeyFrame KeyTime="0:0:2" Value="{x:Static Visibility.Collapsed}"/> 
    </ObjectAnimationUsingKeyFrames> 
    </Storyboard> 
    </Grid.Resources> 
<Grid.Style> 
<Style > 
    <Style.Triggers> 
    <DataTrigger Value="True" Binding="{Binding Path=BlinkOrderAlert,Mode=TwoWay}"> 
     <DataTrigger.EnterActions> 
     <BeginStoryboard x:Name="stry_BlinkOrdAlert" Storyboard="{StaticResource stry_OrderMsgShowHide}"/> 
     </DataTrigger.EnterActions> 
    </DataTrigger> 
    </Style.Triggers> 
</Style> 

,并在我的ViewModel.cs,

 private bool blinkOrderAlert; 
     public bool BlinkOrderAlert 
     { 
      get 
      { 
       return blinkOrderAlert; 
      } 
      set 
      { 
       if (blinkOrderAlert == value) 
        return; 
       this.blinkOrderAlert = value; 
       this.RaisePropertyChanged(this, new PropertyChangedEventArgs("BlinkOrderAlert")); 
      } 
     } 

     public void BlinkOrdAlert() 
     { 
       this.BlinkOrderAlert=false; 
       this.BlinkOrderAlert = true; 

     } 
public ViewModel() 
{ 
    this.BlinkOrderAlert=true; 
} 

,它只能在构造函数初始化第一次。每当我调用BlinkOrdAlert函数时,它就不再工作了。我怎样才能修改datatrigger每次我调用函数运行故事板?谢谢。

回答

2

考虑为您的样式添加以下数据触发器。 当BlinkOrderAlert值设置为false并且值为true时,以下数据触发器将删除故事板,它将添加故事板。

希望这会有所帮助。

<DataTrigger Value="False" Binding="{Binding Path=BlinkOrderAlert,Mode=TwoWay}"> 
        <DataTrigger.EnterActions> 
         <RemoveStoryboard BeginStoryboardName="stry_BlinkOrdAlert"></RemoveStoryboard> 
        </DataTrigger.EnterActions>      
       </DataTrigger> 
1

你真的不应该使用这个DataTrigger可言,您尝试使用属性像这是一个相当的黑客事件。不幸的是,本地触发器,我们说不是最优的,所以你不能使用EventTrigger,因为它只支持RoutedEvents

但是,您也许可以使用Blend的交互性(Blend 3 SDK)中的EventTrigger来使用ViewModel事件,因此可能值得一试。

+0

谢谢,我会先检查出来。 – TNA