【发布时间】:2014-03-25 03:00:31
【问题描述】:
我有以下 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?
非常感谢
【问题讨论】:
-
检查this 链接。想法是它将在
Binding.TargetUpdated事件上触发动画。我已经对其进行了测试,它可以工作,但它也会触发初始值绑定的动画。 -
我喜欢这个解决方案。它使用
EventTrigger,并且不需要在 ViewModel 中更改代码。如果您愿意,可以将此扩展为答案,或者我也可以这样做。 :) -
当然。我可以把我的例子放到答案中。
标签: .net wpf mvvm datatrigger