2

BusyIndi​​cator でラップされた ListBox があります。ListBox は非常に重いため、レンダリングに 4 ~ 5 秒かかる場合があります。

ListBox のレンダリング中に BusyIndi​​cator を使用して UI をブロックする最良の方法は何だろうか?

編集: 申し訳ありませんが、質問を明確にしませんでした... ListBox の ItemsSource はビューモデルの ObservabaleCollection にバインドされていることに注意してください。このコレクションはすぐに取り込まれます。ListBox には非常に複雑なカスタマイズされた ListBoxItems が含まれているため、すべてが本当に遅くなるのは UI レンダリングだと思います。

また、ListBox の ItemsPanel は WrapPanel です。デフォルトの VirtualisingStackPanel とは違うので、これは ListBox のパフォーマンスの問題ではないでしょうか?

4

3 に答える 3

1

これは基本的にあなたがそれを行うことができる方法です。

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;
}
于 2010-08-12T07:43:38.527 に答える
0

UI全体をロックする場合は、コントロールのlayoutrootコンテンツ全体をビジーインジケーターでラップする必要があります。

于 2010-08-12T11:47:25.633 に答える
0

ツールキットを使用したくない場合は、この質問に対する私の回答を使用できます。

WPF - ページの読み込みステータスを表示するための画像の読み込み

于 2010-08-12T07:48:30.993 に答える