WPF:组合框最大项目

WPF: ComboBox Max Items

我有一个 WPF 应用程序,其中有一个组合框

   <ComboBox  Margin="2,0,5,0" Width="178" ItemsSource="{Binding Animateur}" DisplayMemberPath="fsign_nom"   SelectedIndex="0"  >
                                <ComboBox.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <VirtualizingStackPanel />
                                    </ItemsPanelTemplate>
                                </ComboBox.ItemsPanel>
 </ComboBox>

ItemsSource 包含 20100 个项目,问题是当我尝试打开组合框到 select 一个元素时,应用程序被阻止了。

视图模型class

_service.GetAnimateur((item, error) =>
                      {
                          if (error != null)
                          {
                              // TODO : traitement d'erreur
                          }
                          else
                          {
                              _Animateur.Clear();
                              item.ForEach(Elem =>
                              {
                                  _Animateur.Add(Elem);
                              });

                          }
                      });

异步方法:

public async void GetAnimateur(Action<List<fiche>, Exception> callback)
        {
            try
            {
                Task<List<fiche>> data = (Task<List<fiche>>)Task.Run(
                    () =>
                    {
                        DataEntities _db = new DataEntities();
                        _db.Configuration.LazyLoadingEnabled = false;
                        var dpcs = _db.fiche;
                        return new List<fiche>(dpcs);
                    });
                var result = await data;
                callback(result, null);
            }
            catch (Exception ex)
            {
                callback(null, ex);
            } 
        }

我看到这个article所以我添加了虚拟化部分,但我得到了相同的结果

所以我需要知道:

  1. 我该如何解决这个问题?
  2. ItemsSource 中的最大项目数是多少?

尝试在没有异步部分的情况下进行测试
这对我来说很好,有 100 万行

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <ComboBox Grid.Row="0" ItemsSource="{Binding Path=Lots}">
        <ComboBox.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel />
            </ItemsPanelTemplate>
        </ComboBox.ItemsPanel>
    </ComboBox> 
    <ListBox  Grid.Row="1" ItemsSource="{Binding Path=Lots}" 
                VirtualizingStackPanel.IsVirtualizing="True"/>
</Grid>

private List<string> lots;
public  List<string> Lots
{
    get
    {
        if (lots == null)
        {
            lots = new List<string>();
            for (int i = 0; i < 1000000; i++) lots.Add("lot " + i.ToString());
        }
        return lots;
    }
}