2011-09-02 6 views
2

아래 그림과 같이 스토리 보드가있는 그리드가 있습니다. wpf 데이터 트리거를 새로 고치는 방법은 무엇입니까?

내 ViewModel.cs에서

<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> 

,

 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을 사용할 수 없습니다. 불행히도 기본 트리거는 최적이 아니라고 가정합시다. 따라서 EventTriggerRoutedEvents 만 지원하므로 사용할 수 없습니다.

하지만 Blend의 대화 형 작업 (Blend 3 SDK)에서 EventTrigger을 사용하여 ViewModel 이벤트를 사용할 수 있으므로 시도해 볼 가치가 있습니다.

+0

감사합니다. 먼저 확인해 보겠습니다. – TNA

관련 문제