2017-01-12 41 views
1

请求的是当ViewModel的属性SelectedItem引发更改时,我的ListView的行闪烁。UWP - DataTemplate中的故事板ControlStoryboardAction仅第一次触发

这是我的代码,问题是它只能第一次运行。后续更改将被忽略。

<DataTemplate x:Key="myDataTemplate"> 
    <Grid x:Name="myGrid"> 
     <Interactivity:Interaction.Behaviors> 
      <Core:DataTriggerBehavior Binding="{Binding SelectedItem}" Value="True"> 
       <Media:ControlStoryboardAction> 
        <Media:ControlStoryboardAction.Storyboard> 
         <Storyboard> 
          <ColorAnimation 
           To="#009ABF" 
           Storyboard.TargetName="myGrid" 
           Storyboard.TargetProperty="(Grid.Background).(SolidColorBrush.Color)" 
           AutoReverse="True" 
           Duration="0:0:1" 
           RepeatBehavior="1x" /> 
         </Storyboard> 
        </Media:ControlStoryboardAction.Storyboard> 
       </Media:ControlStoryboardAction> 
      </Core:DataTriggerBehavior> 
     </Interactivity:Interaction.Behaviors> 
     <TextBlock Text="{Binding Name}" 
      Grid.Column="1" 
      VerticalAlignment="Top" 
      HorizontalAlignment="Left" 
      Margin="0,2,10,0" 
      FontSize="16" 
      TextAlignment="Left"/> 

     <!--OMISSIS--> 
    </Grid> 

的SelectedItem代码:

public bool SelectedItem 
    { 
     get 
     { 
      return this.selectedItem; 
     } 
     set 
     { 
      this.selectedItem = value; 
      this.RaisePropertyChanged(); 
     } 
    } 
+0

什么是'SelectedItem'类型?,请提供cs代码 –

+0

乍一看,它只是您的'RepeatBehavior =“1x”',因为它对每个实例使用相同的Storyboard,并且您已对其设置了'AutoReverse'。 –

回答

0

这是我找到了解决办法。

1)使用的故事板

<Storyboard Completed="SelectedItemReset" FillBehavior="Stop"> 

3完成事件)使用GalaSoft.MvvmLight.Messaging.Messenger从代码隐藏和视图模型到comunicate属性的SelectedItem的复位

的Xaml

<ListView> 
<ListView.ItemTemplate> 
    <DataTemplate> 
     <Grid x:Name="DataTemplateGrid"> 
      <Interactivity:Interaction.Behaviors> 
       <Core:DataTriggerBehavior Binding="{Binding SelectedItem}" ComparisonCondition="Equal" Value="True"> 
        <Media:ControlStoryboardAction ControlStoryboardOption="Play"> 
         <Media:ControlStoryboardAction.Storyboard> 
          <Storyboard Completed="SelectedItemReset" FillBehavior="Stop"> 
           <ColorAnimation 
            To="Lime" 
            Storyboard.TargetName="DataTemplateGrid" 
            Storyboard.TargetProperty="(Grid.Background).(SolidColorBrush.Color)" 
            Duration="0:0:1"/> 
          </Storyboard> 
         </Media:ControlStoryboardAction.Storyboard> 
        </Media:ControlStoryboardAction> 
       </Core:DataTriggerBehavior> 
      </Interactivity:Interaction.Behaviors> 

      <!--OMISSIS--> 

     </Grid> 
    </DataTemplate> 
</ListView.ItemTemplate> 

CodeBehind

private void SelectedItemReset(object sender, object e) 
{ 
GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<Mvvm.ViewModels.Units.SelectedItemResetMessage>(new Mvvm.ViewModels.Units.SelectedItemResetMessage()); 
} 

MVVM类.ctor

public MyViewModel() 
{ 
    GalaSoft.MvvmLight.Messaging.Messenger.Default.Register<SelectedItemResetMessage>(this, message => 
    { 
     if (this.SelectedItem == true) 
      this.SelectedItem = false; 
    }); 
} 

注:我的DataTemplate在一个单独的文件和链接与ItemTemplate属性ListView控件,这让我无法调用代码隐藏已完成的方法。