Xaml DataTemplate ControlStoryboardAction中的UWP-情节提要仅第一次激发

Xaml DataTemplate ControlStoryboardAction中的UWP-情节提要仅第一次激发,xaml,binding,storyboard,uwp,behavior,Xaml,Binding,Storyboard,Uwp,Behavior,请求是当ViewModel的属性SelectedItem引发更改时,my ListView的行闪烁 这是我的代码,问题是它只在第一次工作。随后的更改将被忽略 <DataTemplate x:Key="myDataTemplate"> <Grid x:Name="myGrid"> <Interactivity:Interaction.Behaviors> <Core:DataTriggerBehavior B

请求是当ViewModel的属性SelectedItem引发更改时,my ListView的行闪烁

这是我的代码,问题是它只在第一次工作。随后的更改将被忽略

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

这就是我找到的解决办法

1) 使用情节提要的已完成事件

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

3) 使用GalaSoft.MvvmLight.Messaging.Messenger与CodeBehind通信,并查看SelectedItem属性的重置

Xaml


代码隐藏

private void SelectedItemReset(object sender, object e)
{
GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<Mvvm.ViewModels.Units.SelectedItemResetMessage>(new Mvvm.ViewModels.Units.SelectedItemResetMessage());
}
private void SelectedItemReset(对象发送方,对象e)
{
GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(新建Mvvm.ViewModels.Units.SelectedItemResetMessage());
}
mvvmclass.ctor

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

注意:我的DataTemplate位于单独的文件中,并使用ItemTemplate属性链接到ListView,这使我无法调用CodeBehind中完成的方法。

这就是我找到的解决方案

1) 使用情节提要的已完成事件

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

3) 使用GalaSoft.MvvmLight.Messaging.Messenger与CodeBehind通信,并查看SelectedItem属性的重置

Xaml


代码隐藏

private void SelectedItemReset(object sender, object e)
{
GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<Mvvm.ViewModels.Units.SelectedItemResetMessage>(new Mvvm.ViewModels.Units.SelectedItemResetMessage());
}
private void SelectedItemReset(对象发送方,对象e)
{
GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(新建Mvvm.ViewModels.Units.SelectedItemResetMessage());
}
mvvmclass.ctor

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

注意:我的DataTemplate位于一个单独的文件中,并使用ItemTemplate属性链接到ListView,这使我无法调用CodeBehind中完成的方法。

什么是
SelectedItem
type?,请提供cs code乍一看,这只是您的
RepeatBehavior=“1x”
由于它对每个实例使用相同的情节提要,并且您在其上设置了
自动翻转
。什么是
SelectedItem
类型?请提供cs code乍一看,这只是您的
RepeatBehavior=“1x”
因为它对每个实例使用相同的情节提要,并且您在其上设置了
自动翻转