2

約 1500 の要素を含む ComboBox を作成しました。この ComboBox は、コレクションにストアド プロシージャを入力しても、最初は非常に遅くなります。どうすればよいですか?

ここにコードがあります`

<ComboBox  Name="cbMember" TextSearch.TextPath="MemberFullName" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" IsEditable="True" Height="23" VerticalAlignment="Center" Grid.Row="1" Grid.Column="1" Margin="5,0,0,0" ItemsSource="{Binding MemberCollection}" SelectedItem="{Binding Path=SelectedSearchMember,Mode=TwoWay,UpdateSourceTrigger=LostFocus}"  KeyDown="cbMember_KeyDown"  DropDownClosed="cbMember_DropDownClosed"  SelectionChanged="cbMember_SelectionChanged">
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding MemberFullName}"  VerticalAlignment="Center"  />
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                        <ComboBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <VirtualizingStackPanel />
                            </ItemsPanelTemplate>
                        </ComboBox.ItemsPanel>
                    </ComboBox>`

ここにオブザーバブル コレクション コードを入力します。

 MemberCollection = new ObservableCollection<PROC_MembersList_Result>(_context.PROC_MembersCollectionList().Where(c => c.IsHide != null && (bool)c.IsHide == true));
4

1 に答える 1

1

時間がかかるのはリモート呼び出しなのか、それともすべての要素をレンダリングするのに時間がかかるのは WPF なのか (仮想化が機能していないことを意味します) を知ることが重要です。

まず、コンストラクターでリモート呼び出しを移動します。

public MyViewModel()
{
    Task.Factory.StartNew(() => 
    {
       var members = new ObservableCollection<PROC_MembersList_Result>(
           _context.PROC_MembersCollectionList()
                    .Where(c => c.IsHide != null && (bool)c.IsHide == true));

       Application.Current.Dispatcher.Invoke(new Action(() => 
       {
           MemberCollection = members;
       }));
    }
}

これにより、アプリがフリーズしないように別のスレッドでリモート呼び出しが行われ、ディスパッチャーを使用しMemberCollectionて UI スレッドに設定されます (そうしないと、クロススレッド例外が発生します)。

2 つ目の問題については、Google で調べてみると、正しい仮想化の問題を解決するのは難しい場合があります。

于 2012-11-23T09:33:34.450 に答える