как загрузить элементы управления пользовательским интерфейсом один за другим в WPF - PullRequest
0 голосов
/ 10 октября 2011

Я работаю над приложением WPF, в котором есть несколько представлений списка.

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

Так что в основном мне нужно, чтобы ListView1 былзагружен и сделан видимым для пользователя первым.Затем ListView2 начинает загружаться, и после завершения становится видимым для пользователя.Другими словами, все представления списка загружаются, когда страница загружается 9 по одному), и каждое из них становится видимым сразу после загрузки.

Я попытался использовать что-то, эквивалентное DoEvents () http://www.cnblogs.com/sheva/archive/2006/08/24/485790.html Но это не сработало.

Просто чтобы уточнить;Когда страница загружена и элементы для lv1 заполнены, и lv1 показывает с элементами, но lv2 и lv3 будут ПУСТЫМИ.Затем элементы для lv2 загружаются, и мы должны видеть, что lv1 и lv2 заполнены их элементами.В это время lv3 должен быть видимым и пустым.Затем мы получим элементы для lv3, и все представления списка будут заполнены.Все они должны быть видны сразу после загрузки первого элемента с его элементами.Кто-нибудь может предложить какой-либо способ добиться этого?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Я использовал backgroundworker, чтобы получить данные для первого просмотра списка. По завершении работы над фоном, я заполнил первый ListView. Затем снова получили данные для второго просмотра списка, используя backgroundworker, и onComplete заполнили второе представление списка и т. Д.

Также используется BusyIndicator (WPFToolKitExtended) для загружаемого списка.

0 голосов
/ 10 октября 2011

Я бы использовал фоновый поток или Dispatcher для загрузки списков по порядку.

Таким образом, вы получите все свои данные за один раз, сначала проверьте, какой из них следует загрузить, а затем запустите этот.в другой теме.Когда этот процесс завершится, запустите следующий.А когда закончится второй, загрузите третий.

Вот пример:

var list1 = new int { 1, 2, 3, 4 };
var list2 = new int { 5, 6, 7 };
var list3 = new int { 8, 9 };

// Optionally do whatever checks needed to figure out which
// list should load first

this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
new Action(delegate() 
{
    MyListBox1.ItemsSource = list1;

    this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
    new Action(delegate() 
    {
        MyListBox2.ItemsSource = list2;

        this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        new Action(delegate() 
        {
            MyListBox3.ItemsSource = list3;
        }
    }
}
...