Hou*_*man 4 .net wpf datatrigger mvvm
我有以下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>
Run Code Online (Sandbox Code Playgroud)
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
2)如果我将整个样式定义存储在里面<Window.Resources>,我将如何访问ViewModels属性LastTradePrice?
非常感谢
如评论中所述,您可以利用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>
Run Code Online (Sandbox Code Playgroud)
此外,如果想简单地通知换色要设置AutoReverse="True"对ColorAnimation否则Aqua颜色会留下来.此解决方案的唯一缺点是,它将在DataGrid创建和加载初始值时触发.
还有一个Binding.SourceUpdated事件与NotifyOnSourceUpdated反对绑定有关,并且在与TargetUpdated事件相反的方向上工作.当新值从视图传输到视图模型时,将触发它.
获取或设置一个值,该值指示当值从绑定目标传输到绑定源时是否引发SourceUpdated事件.
默认情况下,当视图和视图模型之间传输值时,NotifyOnTargetUpdatedabd NotifyOnSourceUpdated将设置为false以节省引发2个附加事件.
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |