我有一个mvvm应用程序,可以从远程服务器检索大量数据。 我想在加载数据时添加动画 这样做的最佳方式。
答案 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绑定都要刷新。