Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在更新ViewModel属性后触发动画?_.net_Wpf_Mvvm_Datatrigger - Fatal编程技术网

.net 如何在更新ViewModel属性后触发动画?

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

我有下面的DataGrid单元格,只要底层的
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
abd
NotifyOnSourceUpdated
都将设置为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>