开发者

how to refresh wpf data trigger ?

i have the grid with storyboard as below.

<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}">
       <D开发者_运维技巧ataTrigger.EnterActions>
        <BeginStoryboard x:Name="stry_BlinkOrdAlert" Storyboard="{StaticResource stry_OrderMsgShowHide}"/>
       </DataTrigger.EnterActions>
     </DataTrigger>
  </Style.Triggers>
</Style>

and in my 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;
}

and it only works first time when constructor is initialized. Whenever i call the BlinkOrdAlert function, it's not working anymore. How can i modify the datatrigger to run storyboard everytime i call the function? Thanks.


Consider adding the following data trigger to you style. The Following data trigger will remove the story board when the BlinkOrderAlert value set to false and when the value was true it will add story board.

hope this will help.

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


You should not really use a DataTrigger for this at all, you try use a property like an event which is quite a hack. Unfortunately the native triggers are, let's say not optimal, so you cannot use an EventTrigger as it only supports RoutedEvents.

But you might be able to use ViewModel-events using the EventTrigger from Blend's Interactivity (Blend 3 SDK) instead, so that might be worth a try.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜