在mvvm中制作通用加载动画

时间:2009-07-25 19:17:39

标签: wpf animation mvvm

我有一个mvvm应用程序,可以从远程服务器检索大量数据。 我想在加载数据时添加动画 这样做的最佳方式。

2 个答案:

答案 0 :(得分:3)

一种方法是在视图模型中使用名为IsLoadingData的属性。然后,您可以使用BooleanToVisibilityConverter将其绑定到承载动画的控件的Visibility属性。

Visibility={Binding 
    Path=IsLoadingData, 
    Converter={StaticResource BooleanToVisibilityConverter}}

当VisibilityProperty设置为true时,此控件可以使用ControlTemplate启动包含动画的Storyboard。

<ControlTemplate.Triggers>
    <Trigger Property="IsVisible" Value="True">
        <Trigger.EnterActions>
            <BeginStoryboard 
                x:Name="Storyboard0" 
                Storyboard="{StaticResource Animation0}" 
                />
        </Trigger.EnterActions>
    </Trigger>
</ControlTemplate.Triggers>

有关此动画的示例,请参阅包含完整来源的blog post

答案 1 :(得分:1)

希望您可能有想要显示的Object的DataTemplate。确保已将相同的Empty实例绑定到UI,以便在数据加载之前实例化DataTemplate。让Object具有IsLoaded / IsRefreshed属性。然后,您可以为DataTemplate编写DataTrigger,以便在IsLoaded从VM更改时启动和停止加载(或数据刷新)动画,一旦它为true,您可以使动画视觉效果折叠(或慢速淡入淡出动画),以便所有数据都是显示得很好。

我有一个老博客在这里做类似的事情http://jobijoy.blogspot.com/2009/07/easy-way-to-update-all-ui-property.html, 另一个可能对您有用的提示是,使用null来升级NotifypropertyChanged事件,因为PropertyChangedEventArgs将告诉Datatemplate的所有Property绑定都要刷新。