我有以下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>
1)但<DataTrigger Binding="{Binding LastTradePrice}" Value="True">
行没有任何意义。
属性LastTradePrice
显然不是用value = True
测量的布尔值。如何在更新属性时触发触发器?显然我已经实现了INotification:
public double LastTradePrice
{
get { return _model.LastTradePrice; }
set
{
if (value != _model.LastTradePrice)
{
LastTradePrice = value;
OnPropertyChanged("LastTradePrice");
}
}
}
2)如果我将整个样式定义存储在<Window.Resources>
中,我将如何访问ViewModels属性LastTradePrice
?
非常感谢
答案 0 :(得分:8)
如评论中所述,您可以使用Binding.TargetUpdated
活动。
当值从绑定源传输到绑定目标时发生,但仅适用于将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>
此外,如果想要通过颜色更改暂时通知,您希望将AutoReverse="True"
设置为ColorAnimation
,否则Aqua
颜色将保留。此解决方案的唯一缺点是在创建DataGrid
并加载初始值时也会触发。
还有Binding.SourceUpdated
事件与NotifyOnSourceUpdated
一起使用以防止绑定,并且与TargetUpdated
事件的方向相反。当新值从视图传输到视图模型时,将触发它。
获取或设置一个值,该值指示当值从绑定目标传输到绑定源时是否引发SourceUpdated事件。
默认情况下,NotifyOnTargetUpdated
abd NotifyOnSourceUpdated
都将设置为false,以便在视图和视图模型之间传输值时节省2个额外事件。