2017-01-12 2 views
1

Запрос состоит в том, что строка моего ListView мигает, когда свойство SelectedItem ViewModel вызывает изменения.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" ', так как он использует одну и ту же раскадровку для каждого экземпляра, и у вас на нем установлен« AutoReverse ». –

ответ

0

Это решение я нашел.

1) Используйте Завершена событие раскадровки

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

3) С помощью GalaSoft.MvvmLight.Messaging.Messenger общаются с CodeBehind и ViewModel сброс недвижимости 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 был в отдельном файле и связан с ListView со свойством ItemTemplate, это помешало мне вызов метода Завершена в CodeBehind.

Смежные вопросы