4

各グリッドセルがComboBox. ComboBox の値と選択された値は からバインドされDataContextます。問題は、それが非常に遅いことです。フォームを作り直して、コンボボックスの代わりにテキストボックスを表示し (マウス入力時にTextBox変換される)、すぐに機能するようにしました。ComboBox

ComboBox が非常に遅いのはなぜですか? ComboBoxes の大規模なバインディングを改善する方法はありますか?

4

1 に答える 1

5

ComboBoxデフォルトでは virtualization( ) を使用しませんVirtualizingStackPanel。コントロールが使用するパネルを非常に簡単な方法で変更できます。

<ComboBox ItemsSource="{Binding}">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>

参照: UI 仮想化によるコンボボックスのパフォーマンスの向上

これは、何千ものアイテムがある場合にパフォーマンスを向上させるのにComboBox非常に役立ちますが、1000 個のコンボボックスを持つことは UI にとって多くの場合にどれだけ役立つかはわかりません。

これらのコンボボックスを仮想化パネルに配置することもできます (のようにListBox、または直接使用してVirtualizedStackpanel)。

もう 1 つの方法は、プロパティComboBox ItemSourceを使用してバインドを非同期にすることです。IsAsync

あなたがあなたとして使っていることを願ってObservableCollectionいますItemSource;

于 2012-06-25T06:12:28.873 に答える