0

明確にするために編集:

私のアプリケーションには2つのListViewがあります。最初のものには、List <KeyPair <String、List<Elements>>が含まれています。リスト内のアイテムの表示は、キー(文字列)のみを表示するようにテンプレート化されています。ユーザーがこのリスト(SelectionChanged)でアイテムを選択すると、2番目のListViewのItemSourceがキーペアの値に変更されます。

これは、列幅がAutoのグリッド内に配置されます。

<ListView ItemsSource="{Binding Path=FunctionIndex.Index}"
          Name="completeFunctionIndexView"        
          Style="{StaticResource SearchListStyle}"
          SelectionChanged="functionIndexView_SelectionChanged" />

<ListView Name="SearchResults" 
          VirtualizingStackPanel.IsVirtualizing="True"
          VirtualizingStackPanel.VirtualizationMode="Recycling">
              <ListView.View>
                 <GridView >
                    <GridViewColumn 
                                 CellTemplate="{StaticResource ElementLV}"
                                 Width="Auto"/>
                 </GridView>
              </ListView.View>
           </ListView>

スタイルSearchListStyleには、キーを示すTextBlockのみが含まれます(KeyPairが含まれているため)。ElementLVは、Runsがさまざまなプロパティと要素のToString値にバインドされた小さなテキストブロックです。

private void functionIndexView_SelectionChanged(object sender, SelectionChangedEventArgs e)
     {
     //This supposes we want to support a "multiple selection search"
     //for now this isn't implemented
     List<Element> Results = new List<Element>();

     foreach (KeyValuePair<String, List<Element>> item in e.AddedItems)
        {
        Results = item.Value;
        break;
        }

     SearchResults.ItemsSource = Results;
     }

SearchResultsリストビューに表示できるこれらのリストには、多数の要素(100k以上)を含めることができます。私はIsVirtualizingを2番目のリストビューに配置しましたが、ほとんどの場合、それは魅力のように機能します。

しかし、時々、私はそれを引き起こす原因に完全に指を置くことができません(多分アイテムを選択するためにクリックするのが速すぎますか?)アプリケーションはそれがリスト内のすべてのアイテムを生成しなければならないと決定します(これは明らかに望まれていません)...

誰かが私を正しい方向に向けることができますか?SearchResultsがすべてのアイテムの生成を要求する理由はありますか?

測定時に、すべてのアイテムを測定しようとすると、アイテムの幅とSearchResults ListViewにリンクできますか?

4

1 に答える 1

0

リストがすべての要素を生成する原因となった状況を見つけました。幅が指定されていないことはListViewと関係があり、幅がAuto(Autoのグリッド列)のコンテナ内にあります。まだわからない特定の条件では、ListViewは、現在表示されている要素だけを使用するのではなく、すべての要素を生成して幅を測定しようとします。

いつもそうだったとは思いませんが、私のアプリケーションのこの特定の状況では、今ではそうなっています...

于 2012-03-02T13:44:51.960 に答える