2011-05-02 110 views
1

我想知道我是否错过了一些明显的东西。WPF组合框在ListView中的性能

我有一个简单的窗口,里面有3列的ListView。 一个显示文本,另外两个在其中包含组合框。

该ListView约有。 500条记录和组合框都从同一个联系人列表中拉出来, 8,000条记录。

我正在使用MVVM。

这个窗口需要永远打开,一旦它打开它实际上是冻结的固体(它的动作这么慢)

查询到数据库中取十秒钟之(我登录时的VM满载)那么需要两三分钟来打开窗口。 我确保将两个列表都存储在我的虚拟机中的List<T>中,以确保它不会重新处理数据或类似的东西。

正如你可以看到下面。我已经明确尝试使用虚拟化堆叠面板,但这并没有多大帮助。

感谢您的帮助

 <DataTemplate x:Key="ComboboxItemTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
      </Grid.RowDefinitions> 
      <Image Grid.RowSpan="3" Source="{Binding ImageURL, IsAsync=True}" Width="50" /> 
      <TextBlock Grid.Column="1" Text="{Binding Name}" /> 
      <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Email}" /> 
      <TextBlock Grid.Column="1" Grid.Row="2" Text="{Binding CampusName}" /> 
     </Grid> 
    </DataTemplate> 
    <ListView ItemsSource="{Binding MainList}" IsSynchronizedWithCurrentItem="True" Grid.RowSpan="2"> 
     <ListView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel /> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="200" Header="Internal"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <TextBlock Text="{Binding Name}" FontWeight="Bold" /> 
           <TextBlock Text="{Binding MName}" /> 
           <TextBlock Text="{Binding CampusName}" /> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Width="200" Header="Contact1"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <ComboBox ItemsSource="{Binding Source={StaticResource VM}, Path=ContactList, IsAsync=True}" SelectedValue="{Binding HisContactID}" SelectedValuePath="id" ItemTemplate="{StaticResource ComboboxItemTemplate}" Background="{Binding HisColor}" Margin="0,82,0,115" Grid.Row="1" Grid.Column="1"> 
           <ComboBox.ItemsPanel> 
            <ItemsPanelTemplate> 
             <VirtualizingStackPanel /> 
            </ItemsPanelTemplate> 
           </ComboBox.ItemsPanel> 
          </ComboBox> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Width="200" Header="Contact2"> 
       ... 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 

回答

0

我有同样的问题,终于想通了......

它发生ListView控件被嵌套在一个Infragistic的TabControl内每一次的东西是必然在ListView(即:ComboBoxes)中,TabControl的“SelectionChange”正在触发,导致延迟...

我也测试过本地Microsft TabControl,并且我得到了相同的行为,但有点性能更高一点。

我通过验证SelectionChangedEventArgs来解决问题...确保e.AddedItems在处理之前仅包含“TabItem”(而不是ComboBoxes)。

希望它有帮助,