代码之家  ›  专栏  ›  技术社区  ›  ChadT

构建Silverlight 3应用程序

  •  0
  • ChadT  · 技术社区  · 15 年前

    我在创建Silverlight 3应用程序时遇到了麻烦。我需要一些高层次的指导来完成下面的场景。

    我有一个用户填写一堆信息的页面。页面底部基本上有一个提交按钮。

    单击后,它将信息提交到数据库(通过ria服务),然后我需要它将用户转发到新页面。

    我的提交方法基本上是这样的:

    void Click(object o, eventArgs e) {
        ViewModel.SaveMyStuff();
        this.NavigationService.Navigate(MyUri);
    }
    

    因为savemystuff()方法是异步的,所以导航函数几乎是立即运行的。似乎,对数据库的提交从未完全完成。离开页面导航会导致卸载它(和viewmodel)。

    所以基本上我不希望重定向发生,直到db提交完成之后,所以我在查看连接事件处理程序的情况,结果一切都变得有点混乱。是否有某种模式或最佳实践来处理页面是否可以从(和其他基本页面机制)中导航出去?

    我有一些代码,基本上是:

    if (ViewModel.RiaDataContext.IsSubmitting) {
        Thread.Sleep(500);
    }
    

    但是a)这看起来像是一个丑陋的黑客,b)这种情况从来都不是错误的——似乎RIA服务或类似服务中可能存在一个bug。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Simon Steele    15 年前

    考虑到标准的Silverlight模型是异步的,这里最好的方法是确保savemystuff完成后可以调用您—此时您可以导航到该回调中的下一页。

    this.ViewModel.BeginSaveMyStuff(this.OnSaveDone, null);
    
    private void OnSaveDone(IAsyncResult ar)
    {
        Dispatcher.BeginInvoke(() => this.NavigateToNextPage());
    }
    

    就ria数据服务对象(可能在viewmodel中)而言,您可以执行以下操作:

    myContext.SubmitChanges(OnSubmitCompleted, null);
    
    private void OnSubmitCompleted(SubmitOperation so)
    {
        if (so.Error != null)
        {
            // Show the error somehow
        }
        else
        {
            // Fire an event, trigger navigation, you decide!
        }
    }
    
        2
  •  2
  •   wefwfwefwe    15 年前

    听起来问题出在viewmodel类的设计上。你要么

    ViewModel.SaveMyStuff(); // synchronous call

    ViewModel.SaveMyStuffCompleted += new SaveMyStuffCompletedEventHandler(ViewModel_SaveMyStuffCompleted);
    ViewModel.SaveMyStuffAsync();
    ...
    
    void ViewModel_SaveMyStuffCompleted(object sender, SaveMyStuffCompletedEventArgs e)
    {
        this.NavigationService.Navigate(MyUri);
    }
    
        3
  •  0
  •   Martin Liversage    15 年前

    你也可以找到像大卫·伊坦民意测验那样的东西 Silverlight Activity control 有助于在您呼叫服务时向用户提供反馈。

    Silverlight Activity control http://www.davidpoll.com/wp-content/uploads/2009/03/image_61.png

    推荐文章