Frage

Ich habe eine Silverlight -Anwendung, die etwa 2000 Objekte von einem halben Dutzend Feldern in eine AutocompleteBox lädt. Der Filter wird dann so eingestellt, dass sie auf vier Feldern suchen. Ich habe es festgelegt, um nach zwei Zeichen zu suchen.

Wenn ich jedoch das zweite Zeichen (wenn die Box beginnen soll) zum ersten Mal nach der Bevölkerung der Objektliste eingeben soll, dauert die Reaktion der AutoCompleteBox etwa 6-7 Sekunden.

Irgendwelche Ideen, wie ich das optimieren kann?

Gibt es eine Möglichkeit, diese visuellen Elemente gleich nach der Bevölkerung der Liste zu erstellen, anstatt darauf zu warten, dass der Benutzer mit der Eingabe beginnt?

War es hilfreich?

Lösung

Haben Sie das Minimum -TrefixLength -Profil angepasst? Je mehr Charaktere Sie benötigen, desto besser ist die Filterung.

Im Moment haben Sie mit einem niedrigen Präfix 2000+ visuelle Elemente, die erstellt werden, abzüglich eines Filtercharakters, unabhängig von anderen Optimierungen.

Eine andere Möglichkeit besteht darin, Ihre eigene Hintergrund-Thread-Filterung zu implementieren, aber das ist viele der Zwecke für die Kontrolle (dh Einfachheit).

Andere Tipps

Es ist Fehler in AutocompleteBox Kontrolle.

Wenn zum ersten Mal Dropdown eröffnet wird, UI -Virtualisierung wird nicht verwendet und die Kontrolle erstellt alle Elemente.

Um dies zu beheben, müssen Sie festlegen Maximale Höhe zu Netz Dropdown Aufpoppen in AutocompleteBox ControlTemplate. Dies ist XAML -Teil dieser ControlTemplate:

<ControlTemplate TargetType="sdk:AutoCompleteBox">
    <Grid Opacity="{TemplateBinding Opacity}">
        ...

        <Popup x:Name="Popup">
            <Grid Opacity="{TemplateBinding Opacity}" MaxHeight="450">
                <Border x:Name="PopupBorder" BorderThickness="0" Background="#11000000" HorizontalAlignment="Stretch" Opacity="0">
                    <Border.RenderTransform>
                        <TranslateTransform X="1" Y="1"/>
                    </Border.RenderTransform>
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" HorizontalAlignment="Stretch" Opacity="1.0" Padding="0">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FFDDDDDD" Offset="0"/>
                                <GradientStop Color="#AADDDDDD" Offset="1"/>
                            </LinearGradientBrush>
                        </Border.Background>
                        <Border.RenderTransform>
                            <TransformGroup>
                                <TranslateTransform X="-1" Y="-1"/>
                            </TransformGroup>
                        </Border.RenderTransform>
                        <ListBox x:Name="Selector" BorderThickness="0" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ItemTemplate="{TemplateBinding ItemTemplate}" ItemContainerStyle="{TemplateBinding ItemContainerStyle}" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
                    </Border>
                </Border>
            </Grid>
        </Popup>
    </Grid>
</ControlTemplate>

Das funktioniert für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top