DataTrigger绑定IsIndeterminate在样式化进度条上不起作用

时间:2014-09-26 08:51:00

标签: wpf xaml mvvm data-binding datatrigger

我已经创建了一个模板来修改常规的WPF ProgressBar。

一切正常,问题在于启动动画的DataTrigger。 我希望在属性" IsIndeterminate"时触发动画。设置为True。

此示例工作正常==>打开视图时动画正确启动

<ProgressBar Grid.Row="3" Style="{StaticResource DotMoveProgressBar}" IsIndeterminate="TRUE" />

此示例显示DataTrigger:

 <Style x:Key="DotMoveProgressBar" TargetType="{x:Type ProgressBar}">
      <Setter Property="Template">
         <Setter.Value> 
            <ControlTemplate TargetType="{x:Type ProgressBar}">
            [... "template" ...]
              <ControlTemplate.Triggers>

                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsIndeterminate}" Value="True">
                   <DataTrigger.EnterActions>
                      <BeginStoryboard>
                         <Storyboard RepeatBehavior="Forever">
                              [...]
                          </Storyboard>
                      </BeginStoryboard>
                   </DataTrigger.EnterActions>
                </DataTrigger>
              </ControlTemplate.Triggers>
            </ControlTemplate>
       </Setter.Value>
    </Setter>
 </Style>

当我从ViewModel绑定属性时出现问题。

<ProgressBar Grid.Row="3" Style="{StaticResource DotMoveProgressBar}" IsIndeterminate="{Binding  IsLoadingData}" />

当我设置&#34; IsLoadingData&#34;在我的ViewModel中为TRUE,动画不会启动。

问题是

为什么当IsIndeterminatate为&#34; HardCoded&#34;时,anamation正在工作?为TRUE而不是绑定到&#34; IsLoadingData&#34; ?

/!\我已经测试了这些东西:

  • 绑定&#34; IsLoadingData&#34;在其他对象上运行正常。 (经过按钮IsEnable属性测试)
  • 当&#34; IsIndeterminate&#34;在code-beind中设置为true。

所以我认为这是一个DataTrigger问题/技巧/...

(除非这是唯一的解决方案,否则我不想玩可见性)

感谢您的帮助!

(请原谅我的英语不好: - /)


更新:感谢KingKing的评论,这是问题的下一步:

我做了什么:

  1. 将DataTriggerExitActions添加到DataTrigger
  2. 使用TemplateBinding代替RelativeSource Self
  3. 这让我想到了真正的问题: 绑定到按钮的此命令方法工作正常

    Public Sub TestFunction()
       IsLoadingData = Not IsLoadingData
    End Sub
    

    此异步命令方法使DataTrigger无法正确响应

    Private Async Sub SelectFileToOpenAsync()
       IsLoadingData = True
       Await Task.Run(AddressOf LoadFile)
    
       Await GenerateScenario()
    End Sub
    

    使用异步方法似乎使DataTrigger无法正常工作

0 个答案:

没有答案