WPF проблема с обновлением - PullRequest
1 голос
/ 29 марта 2011

У меня странная проблема. Интересно, является ли это стандартным поведением компонентов .NET и как с этим справиться.
Наше приложение использует Galasoft Mvvm Light. У меня есть форма с представлением дерева, который получает данные через асинхронный вызов. И почему эта асинхронная задача выполняется, мы показываем пользователю индикатор выполнения. Я использую ObservableCollection в качестве коллекции для моей древовидной структуры. Теперь проблема:

Этот фрагмент кода дает нам информацию:

public Task<ObservableCollection<FillingTreeNode>> GetTreeStructureAsync(SyncSettings settings)
    {
        SearchRequest request = BuildRequest();
        return searchService.SearchRecordsAsync(request).ContinueWithConversion(
            records => new ObservableCollection<FillingTreeNode>(records
            .Select(cabinet => new FillingTreeNode
            {
                IsChecked = false,
                DisplayName = cabinet.Fields[Fields.CabinetName].Value,
                Node = cabinet.AsFillingNode(FillingNodeType.Cabinet),
                NumberOfNodes = SendXmlRequest(record),
                Children = new ObservableCollection<FillingTreeNode>(GetChildren (record));
    }

}

Это расширение задачи для преобразования результата в новый тип:

        public static Task<TNew> ContinueWithConversion<TOld, TNew>(this Task<TOld> task, Func<TOld, TNew> conversionAction)
    {
        return task.ContinueWith(completedTask => conversionAction(task.Result));
    }

Теперь проблема. Данные загружаются с сервера, пользовательский интерфейс (индикатор выполнения) говорит, что данные загружены, и только после этого SendXmlRequest (запись) (которая немного долго ждать) начинает работать! Но я ожидаю, что это уже сделано. Пользователь ничего не видит, пока эти функции не закончат работать
Вы знаете, в чем причина проблемы? Может ли это быть поведением коллекции Observable? Как я могу это исправить?
Спасибо заранее.

...