Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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
C# Binding.TargetUpdated在初始表单加载后未生效_C#_Wpf_Xaml - Fatal编程技术网

C# Binding.TargetUpdated在初始表单加载后未生效

C# Binding.TargetUpdated在初始表单加载后未生效,c#,wpf,xaml,C#,Wpf,Xaml,下面我有一个由两个文本框组成的控件模板。控件模板用作网格的单元格显示模板,datacontext是my model对象(实现INotifyPropertyChanged)的bindinglist。第二个文本框最初是折叠的。然而,当“询问”和“出价”价格更新发生时,我想通过切换可见性来“刷新”这个文本框大约1秒 我看到的问题是,在初始加载表单时,我确实看到第二个文本框闪烁,但在那之后…什么都没有。有趣的是,如果我单击单元格网格(激活编辑模板),然后单击单元格外(返回显示模板,即下图所示的模板),第

下面我有一个由两个文本框组成的控件模板。控件模板用作网格的单元格显示模板,datacontext是my model对象(实现INotifyPropertyChanged)的bindinglist。第二个文本框最初是折叠的。然而,当“询问”和“出价”价格更新发生时,我想通过切换可见性来“刷新”这个文本框大约1秒

我看到的问题是,在初始加载表单时,我确实看到第二个文本框闪烁,但在那之后…什么都没有。有趣的是,如果我单击单元格网格(激活编辑模板),然后单击单元格外(返回显示模板,即下图所示的模板),第二个文本框就会闪烁

有人能看到为什么第二个文本框在AskPrice或BidPrice更改时不会“闪烁”的问题吗?我确实看到转换器按预期被调用,但更新不会触发故事板动画

<Style x:Key="PriceSpreadAlertStyle" TargetType="TextBlock">
    <Setter Property="Visibility" Value="Collapsed" />
    <Setter Property="Background" Value="Red" />
    <Style.Triggers>
        <EventTrigger RoutedEvent="Binding.TargetUpdated" >
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.Visibility)">
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.2" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.4" Value="{x:Static Visibility.Collapsed}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.6" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.8" Value="{x:Static Visibility.Collapsed}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:01.0" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:01.2" Value="{x:Static Visibility.Collapsed}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Style.Triggers>
</Style>

<ControlTemplate x:Key="QuoteDisplayTemplate" >
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding QuotePrice}" />
        <TextBlock Style="{StaticResource PriceSpreadAlertStyle}">
          <TextBlock.Text>
            <MultiBinding Converter="{StaticResource AskBidToSpreadConverter}">
              <Binding Path="AskPrice" UpdateSourceTrigger="PropertyChanged" NotifyOnTargetUpdated="True" />
              <Binding Path="BidPrice" UpdateSourceTrigger="PropertyChanged" NotifyOnTargetUpdated="True" />
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
    </StackPanel>
</ControlTemplate>

当您执行NotifyPropertyChanged时,检查是否在代码中“获取”了您的值

出于同样的原因,请在初始启动时检查是否存在任何绑定表达式错误

另外,您可以尝试将绑定模式更改为单向,我不这么认为,但它们可能被设置为一次性绑定,从而阻止它处理更改的事件

编辑:
您是否尝试过使用SourceUpdated RoutedEvent而不是TargetUpdated?

我找到的解决方案是移动'NotifyOnTargetUpdated=“True“'从绑定元素到多绑定元素

它是在代码隐藏中获取值。事实上,我看到第二个文本框正在使用转换器的正确值进行更新,如果使其始终可见的话。似乎故事板不是出于某种原因被触发的。