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

use*_*358 1 c# silverlight mvvm

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

 AnimateLoginSuccess(this, null);
//code to navigate to the main page after successful login.
Run Code Online (Sandbox Code Playgroud)

我在我的视图中处理此事件,将其连接起来,其中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();
    }
Run Code Online (Sandbox Code Playgroud)

现在,问题是,即使动画在成功登录后开始,在成功登录时处理移动到不同视图的下一行使得移动到下一个视图的速度非常快,以至于它不会等待动画完成.从而使动画几乎不存在.关于如何使这项工作的任何想法?

Jeh*_*hof 5

您可以使用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.
}
Run Code Online (Sandbox Code Playgroud)