.net 如何在更新ViewModel属性后触发动画?
我有下面的DataGrid单元格,只要底层的.net 如何在更新ViewModel属性后触发动画?,.net,wpf,mvvm,datatrigger,.net,Wpf,Mvvm,Datatrigger,我有下面的DataGrid单元格,只要底层的LastTradePrice属性更改其值,我就想对其背景颜色进行短暂的动画处理 <DataGridTextColumn Header="Last Trade Price" Binding="{Binding LastTradePrice}"> <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell">
LastTradePrice
属性更改其值,我就想对其背景颜色进行短暂的动画处理
<DataGridTextColumn Header="Last Trade Price" Binding="{Binding LastTradePrice}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
// ???
<DataTrigger Binding="{Binding LastTradePrice}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="Aqua" Duration="0:0:0.3" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
2) 如果我将整个样式定义存储在
中,我将如何访问ViewModels属性LastTradePrice
非常感谢如评论中所述,您可以利用此次活动 当值从绑定源传输到绑定目标时发生,但仅适用于NotifyOnTargetUpdated值设置为true的绑定 这意味着,如果将值从视图模型拉入视图,并且针对绑定
NotifyOnTargetUpdated==True
,则会引发TargetUpdated
事件。因此,当最初显示值时,或稍后在视图模型中引发INotifyPropertyChanged.PropertyChanged
事件时,将引发该值
<DataGridTextColumn Header="Last Trade Price" Binding="{Binding Path=LastTradePrice, NotifyOnTargetUpdated=True}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="Aqua" Duration="0:0:0.3" AutoReverse="True" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
此外,如果您想短暂通知颜色更改,您需要针对ColorAnimation
设置AutoReverse=“True”
,否则Aqua
颜色将保持不变。此解决方案唯一的缺点是在创建DataGrid
并加载初始值时也会触发
还有一个Binding.SourceUpdated
事件,它与NotifyOnSourceUpdated
一起工作,与TargetUpdated
事件相反。当新值从一个视图传输到另一个视图模型时,它将被触发
获取或设置一个值,该值指示在值从绑定目标传输到绑定源时是否引发SourceUpdate事件
默认情况下,当在视图和视图模型之间传输值时,在引发2个附加事件时,
NotifyOnTargetUpdated
abdNotifyOnSourceUpdated
都将设置为false以保存。检查链接。想法是它将在Binding.TargetUpdated
事件中触发动画。我已经测试过了,它可以工作,但它也会触发初始值绑定的动画。我喜欢这个解决方案。它使用EventTrigger
,不需要在ViewModel中更改代码。如果您愿意,您可以将此扩展为一个答案,或者我也可以这样做。:)当然我可以用我的例子来回答。没问题。很高兴这有帮助。
<DataGridTextColumn Header="Last Trade Price" Binding="{Binding Path=LastTradePrice, NotifyOnTargetUpdated=True}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="Aqua" Duration="0:0:0.3" AutoReverse="True" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>