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所以我添加了虚拟化部分,但我得到了相同的结果
所以我需要知道:
- 我该如何解决这个问题?
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;
}
}
我有一个 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所以我添加了虚拟化部分,但我得到了相同的结果
所以我需要知道:
- 我该如何解决这个问题?
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;
}
}