如何隐藏wp7中的异步回调按钮?

时间:2011-03-26 21:51:32

标签: c# .net windows-phone-7

所需方案: 当我点击按钮时,我希望它被隐藏,直到异步调用完成。

我在xaml中有一个像这样的按钮

    <Button Name="btnLoadNextTransactions" Content="Button" Click="btnLoadNextTransactions_Click"  Visibility="{Binding LoadMore, Converter={StaticResource converter}}" />

和点击事件

 private void btnLoadNextTransactions_Click(object sender, RoutedEventArgs e)
    {
        App.ViewModel.LoadMore = false;
        ApplicationBl<Transaction>.GetDataLoadingCompleted += GetDataLoadingCompleted;
        ApplicationBl<Transaction>.GetData(++offset*10, 10);//works only if I comment out this line
        App.ViewModel.LoadMore = true;
    }

仅当我注释掉异步调用

时才有效
//ApplicationBl<Transaction>.GetData(++offset*10, 10);

但这不是我要评论的功能:) 我知道我错过了一些delagete或调度员。我刚开始用SL编码。

2 个答案:

答案 0 :(得分:1)

您需要在GetData Loading Completed方法中加载Load More = true。

答案 1 :(得分:1)

正在发生的是该行

ApplicationBl<Transaction>.GetData(++offset*10, 10);

不阻塞调度线程,因此立即调用LoadMore = true get。最简单的方法可能是获取数据后调用的委托。

因此,您可以将GetData方法更改为:

public void GetData( int offset, int pageSize, Action callback)
{
  //Existing code.

  //Notify the callback that we are done.
  callback();
}

完成后,只需调用方法:

ApplicationBl<Transaction>.GetData(++offset*10, 10, () =>
{
  Deployment.Current.Dispatcher.BeginInvoke(() => App.ViewModel.LoadMore = true;);
});

您需要使用Dispatcher的原因是回调正在后台线程中执行,并且由于LoadMore属性正在影响Gui Elements,因此需要在UI线程上完成。