Silverlight - блокировка экрана во время рендеринга ListBox с использованием BusyIndicator - PullRequest
2 голосов
/ 12 августа 2010

У меня есть ListBox, который обёрнут BusyIndicator. ListBox довольно тяжелый, иногда рендеринг может занять 4 или 5 секунд.

Интересно, как лучше всего заблокировать пользовательский интерфейс с помощью BusyIndicator во время рендеринга ListBox?

Редактировать: Извините, я не прояснил свой вопрос ... Пожалуйста, имейте в виду, что ItemsSource ListBox связан с ObservabaleCollection в viewmodel Эта коллекция быстро заполняется. Я полагаю, что все сильно тормозит, это рендеринг пользовательского интерфейса, поскольку ListBox содержит настраиваемые элементы ListBoxItems, которые довольно сложны.

Также ItemsPanel ListBox является WrapPanel. Это не по умолчанию VirtualisingStackPanel, так что я думаю, это может быть проблема производительности ListBox?

Ответы [ 3 ]

1 голос
/ 12 августа 2010

Это в основном, как вы могли бы сделать это.

XAML-файл

<toolkit:BusyIndicator HorizontalAlignment="Left" VerticalAlignment="Top"
    x:Name="m_BusyIndicator">
    <ListBox Width="200" Height="300" x:Name="m_ListBox"/>
</toolkit:BusyIndicator>

CS файл

public MainPage()
{
    // Required to initialize variables
    InitializeComponent();
    InitializeListBox();
}

private void InitializeListBox()
{
    m_BusyIndicator.IsBusy = true;
    m_ListBox.ItemsSource = null; // Load your data (mayby async) when done call OnListBoxItemsLoaded()
}

private void OnListBoxItemsLoaded()
{
    m_BusyIndicator.IsBusy = false;
}
0 голосов
/ 12 августа 2010

Если вы хотите заблокировать весь пользовательский интерфейс, вам нужно обернуть весь контент макета элемента управления с индикатором занятости.

0 голосов
/ 12 августа 2010

Если вы не хотите использовать инструментарий, вы можете использовать мой ответ на этот вопрос:

WPF - загрузка изображения для отображения статуса загрузки страницы

...