在Silverlight 4中使用MVVM切换视图之前,等待故事板动画完成

本文关键字:等待 故事 动画 视图 Silverlight MVVM | 更新日期: 2023-09-27 18:18:19

我在Silverlight 4中有一个登录页面。我使用MVVM来处理与页面的所有交互。在成功登录时,我有一个自定义事件,在我的视图模型中触发,然后是导航到主页面的代码。我使用事件聚合,发布&订阅以在视图之间导航。

 AnimateLoginSuccess(this, null);
//code to navigate to the main page after successful login.

我在我的视图中处理这个事件,像这样连接它,其中LoginSuccessStoryboard是我为一些基本动画创建的故事板:

    //constructor of view
    public Login(LoginVM vm)
    {
        InitializeComponent();
        DataContext = vm;
        thisVM = vm;
        vm.AnimateLoginSuccess += new EventHandler(vm_AnimateLoginSuccess);
    }

//event handling method in view
    void vm_AnimateLoginSuccess(object sender, EventArgs e)
    {
        LoginSuccessStoryboard.Begin();
    }

现在,问题是,即使动画在成功登录后开始,在成功登录时处理移动到另一个视图的下一行使移动到下一个视图如此之快,以至于它不等待动画完成。从而使动画实际上不存在。关于如何使它工作有什么想法吗?

在Silverlight 4中使用MVVM切换视图之前,等待故事板动画完成

你可以使用Storyboard的Completed事件,在动画结束后导航到你的视图。在ViewModel中添加一个方法,该方法在动画结束后执行,以导航到默认的第一个视图。

public Login(LoginVM vm) {
    InitializeComponent();
    LoginSuccessStoryboard.Completed += new EventHandler(NavigateToViewAfterAnimation);
    DataContext = vm;
    thisVM = vm;
    vm.AnimateLoginSuccess += new EventHandler(vm_AnimateLoginSuccess);
}
private void NavigateToViewAfterAnimation(object sender, EventArgs e) {
   thisVW.NavigateToFirstView();  // Navigates to the first view.
}