我在WPF应用程序中有以下情况:
-
我已经从插座上推出了一些数据,这些数据可以是新项目或编辑的项目。
-
当项目更新时,我要眨眼,实际上是使用布尔属性进行的,
-
我有以下DataTrigger
<Style TargetType="{x:Type telerik:GridViewCell}" x:Key="Style"> <Style.Triggers> <DataTrigger Binding="{Binding IsChanged}" Value="True"> <DataTrigger.EnterActions> <RemoveStoryboard BeginStoryboardName="Highlight" /> <BeginStoryboard Name="Highlight"> <Storyboard> <ColorAnimation Duration="00:00:03" From="Red" FillBehavior="Stop" Storyboard.TargetProperty="(Control.Background).(SolidColorBrush.Color)" /> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> </DataTrigger> </Style.Triggers>
使用CellStyleSelector将以下样式应用于RadgridView的每一行。目前,但我认为这是一个黑客,我有一个接口将值重置为false
public override Style SelectStyle(object item, DependencyObject container)
{
if (item is INotifyUpdate notifyUpdate)
{
//First I check if the cell has to blink
if (notifyUpdate.IsChanged)
{
notifyUpdate.IsChanged = false;
}
...
}
- 我的问题是,我已经执行此hack以将值重置为False,否则将其设置为真,从未恢复。结果,当更新另一排并刷新网格时,我得到了已更新以再次闪烁的行。
有没有办法将false值设置回false?
而不是使用自定义IsChanged
属性,您可以为Binding.TargetUpdated
事件创建EventTrigger
并在此处启动动画。
类似:
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<!-- your animation here -->
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
不要忘记为Binding
设置NotifyOnTargetUpdated=True
您想观察。
因此,您根本不需要"不必要的" IsChanged
属性。仅当Binding
更新目标值时,所需的动画就会触发。