WPF:ComboBox最大项目

时间:2015-02-12 13:31:39

标签: c# wpf mvvm data-binding combobox

我有一个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个项目,问题是当我尝试打开组合框以选择元素时,应用程序被阻止。

viewmodel类

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

                          }
                      });

Asynchrounous方法:

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中的最大项目数是多少?

1 个答案:

答案 0 :(得分:2)

尝试在没有异步部分的情况下进行测试 对于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;
    }
}