所需方案: 当我点击按钮时,我希望它被隐藏,直到异步调用完成。
我在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编码。
答案 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线程上完成。