Silverlight AutoCompletebox는 첫 번째 "검색"에서 응답하는 데 오랜 시간이 걸립니다.

StackOverflow https://stackoverflow.com/questions/1638915

문제

약 2000 개의 필드의 약 2000 개 객체를 자동 완성 상자에로드하는 Silverlight 애플리케이션이 있습니다. 그런 다음 필터가 네 개의 필드 중 하나에서 검색하도록 설정됩니다. 두 문자 후 검색을 시작하도록 설정했습니다.

그러나 객체 목록을 채운 후 처음으로 두 번째 문자 (상자가 채워지기 시작할 때)를 입력하면 자동 완성 상자는 응답하는 데 약 6-7 초가 걸립니다.

이것을 최적화 할 수있는 방법에 대한 아이디어가 있습니까?

사용자가 입력을 시작하기를 기다리는 대신 목록이 채워진 직후에 이러한 시각적 요소를 만들 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

Alreay는 최소 펌프 픽스 길이 프로피어를 조정 했습니까? 문자가 더 많을수록 필터링이 더 좋습니다.

현재, 접두사가 낮 으면 2000 개 이상의 시각적 요소가 생성되는 2000 개 이상의 시각적 요소가 있습니다. 마이너스는 다른 최적화에 관계없이 필터링의 한 특성을 사용합니다.

또 다른 옵션은 자신의 배경 스레드 필터링을 구현하는 것이지만, 이는 제어를위한 많은 목적 (예 : 단순성)을 물리칩니다.

다른 팁

그것은 버그입니다 자동 완성 상자 제어.

드롭 다운이 처음 열리면 UI 가상화 사용되지 않고 제어하면 모든 항목이 생성됩니다.

이 문제를 해결하려면 설정해야합니다 Maxheight 에게 그리드 드롭 다운 팝업 AutoCompleteBox에서 ControlTemplate. 이것은이 controlTemplate의 XAML 부분입니다.

<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>

이것은 나를 위해 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top