如何刷新wpf数据触发器?

时间:2011-09-02 03:54:27

标签: c# wpf xaml triggers wpf-controls

我的网格与故事板如下。

<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函数时,它就不再工作了。每次调用函数时,如何修改数据触发器以运行故事板?谢谢。

2 个答案:

答案 0 :(得分:2)

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

希望这会有所帮助。

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

答案 1 :(得分:1)

你根本不应该使用DataTrigger,你尝试使用像一个非常黑客的事件这样的属性。不幸的是,原生触发器不是最佳的,因此您不能使用EventTrigger,因为它只支持RoutedEvents

但您可以使用来自Blend的交互性EventTrigger的{​​{1}}来使用ViewModel事件,因此可能值得一试。