2011-05-02 111 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)。

希望它有幫助,