2010-06-08 6 views
3

Je suis confronté à un problème de performances avec une liste déroulante saturée (5000 éléments). Le rendu de la liste déroulante est vraiment lent (comme s'il calculait tous les éléments avant de les afficher).Problème de performances de Silverlight combobox

Avez-vous un truc pour rendre cet affichage paresseux?

Code Xaml:

<Grid x:Name="LayoutRoot"> 
     <StackPanel Orientation="Horizontal" Width="200" Height="20"> 
      <TextBlock>Test Combo </TextBlock> 
      <ComboBox x:Name="fooCombo" Margin="5,0,0,0"></ComboBox> 
     </StackPanel> 
    </Grid> 
Code

derrière:

MainPage public() { InitializeComponent();

List<string> li = new List<string>(); 

    int Max = 5000; 
    for (int i = 0; i < Max; ++i) 
     li.Add("Item - " + i); 

    fooCombo.ItemsSource = li; 
} 

Eh bien, il semble être a bug dans la virtualisation de l'interface utilisateur COMBOBOX, donc un AutoCompleteBox devrait être le chemin à parcourir.

Répondre

2

Utilisez à la place le AutoCompleteBox, ajustez le nombre de caractères qui doivent être entrés avant qu'une liste déroulante soit remplie pour limiter le nombre d'éléments déroulants nécessaires à un moment donné.

+0

c'est en effet une solution de contournement, je vais considérer cela. – Vinzz

+1

@Vinzz: Je ne sais pas s'il existe une vraie solution (si c'est juste un problème) puisque l'exigence de remplir une combobox avec 100s et encore moins 1000s d'éléments n'est pas une très bonne décision de conception d'interface utilisateur. – AnthonyWJones

6

Si vous voulez un ComboBox réel (et non un AutoCompleteBox) qui a fait cela, vous pouvez remplacer le ItemsTemplate par un VirtualizingStackPanel. Dans votre exemple, cela ressemblerait à ceci:

<ComboBox x:Name="fooCombo" Margin="5,0,0,0"> 
    <ComboBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel></VirtualizingStackPanel> 
     </ItemsPanelTemplate> 
    </ComboBox.ItemsPanel> 
</ComboBox> 

Comme un guide bien, je serais probablement en revue votre scénario d'utilisation pour voir si oui ou non un ComboBox est le contrôle correct pour vous - depuis 5000 articles semble comme beaucoup puissant pour une liste déroulante. A propos, la lenteur est un comportement attendu dans Silverlight et pas un bug.

+0

C'est la meilleure réponse. –

+0

Cela ne fonctionne pas dans SL5, faites attention! Je l'avais dans mon projet SL4 et il a cassé après la mise à niveau. http://connect.microsoft.com/VisualStudio/feedback/details/715111/silverlight-5-combobox-problem – katit