Как дождаться завершения асинхронного вызова на WP7? - PullRequest
1 голос
/ 08 августа 2011

Я загружаю сводные элементы на основе вызова через веб-сервис. Учитывая, что у меня есть только асинхронные вызовы, как мне отловить, когда он закончится?

Моя главная причина в том, что я хотел бы сохранить диалог загрузки, пока он ожидает обратного вызова. Тем не менее, я загружаю в класс viewmodel, и, очевидно, панель загрузки находится в классе страницы.

Честно говоря, если бы я мог просто знать, когда был загружен один элемент сводной таблицы, это было бы хорошо, однако установка обработчика событий для loadpivotitem, похоже, никогда не сработает.

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Я предполагаю, что вы привязываете свой View к вашей ViewModel.В этом случае все, что вам нужно сделать, это создать свойство bool и установить его в значение true во время загрузки / ожидания асинхронного вызова.Вы можете сделать что-то вроде этого:

private bool isSyncing;
    public bool IsSynchronizing
    {
        get { return this.isSyncing; }
        set
        {
            this.isSyncing = value;
            this.RaisePropertyChanged(() => this.IsSynchronizing); //Use appropriate RaisePropertyChanged method for your MVVM implementation
        }
    }

Перед началом асинхронного вызова вы должны установить IsSynchronizing = true.В конце обработчика событий установите IsSynchronizing = false;

С вашей точки зрения, вы можете привязаться к этому bool.Для панели загрузки это может выглядеть следующим образом:

<ProgressBar Visibility="{Binding IsSynchronizing, Converter={StaticResource booleanToVisibilityConverter}}" IsIndeterminate="{Binding IsSynchronizing}" Style="{StaticResource PerformanceProgressBar}" />

В вашем сценарии вы можете использовать инвертированный BooleanToVisibilityConverter, чтобы скрыть сводку во время загрузки.

Надеюсь, это поможет, дайте мне знать, если вам нужна дополнительная информация об использовании BooleanToVisibilityConverters

1 голос
/ 08 августа 2011

Вам потребуется подключить обработчик событий, аналогичный показанному в этом блоке кода:

public void LoadData()
{
    SampleDataServiceClient client = new SampleDataServiceClient();
    client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
    client.GetDataAsync();
}

void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
    this.DataContext = e.Result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...