0

ユーザー コントロールを作成し、それを stackPanel コントロールに追加する単純な foreach ステートメントがあります (以下のコードを参照)。Products は単なる int のリストです。

 foreach (int id in Products)
 {
   ItemControl itemControlProduct = new ItemControl (id );
   this.StackPanelControl.Children.Add(itemControlProduct);
 }

リストに約 50 個のアイテム (製品) がある場合、これは正常に機能しますが、それを超えると、アプリケーションはレンダリングを拒否します。(つまり、例外は発生せず、Windows タスク マネージャーはプログラムが正常に実行されていると表示しますが、ウィンドウは表示されません)

どうすればこの問題を解決できますか。600 以上のアイテムをロードする必要があります。psページネーションを使用したくありません。すべての要素を一度にリストしたい。

4

2 に答える 2

1

これは直接的な答えではありませんが、コントロールを操作するこの「コード ビハインド」の方法に反対することを強くお勧めします。WPF は、データ バインディングを中心に設計されています。コレクションに 600 個のアイテムを含むビュー モデルを作成し、WPF に難しい作業を任せます。

ItemsControlを aにItemsPanel設定してを使用することを検討してくださいVirtualizingStackPanel。これにより、コントロールが表示されたときにのみ作成されるようになります。ItemsSourceプロパティをコレクションにバインドします。

<ItemsControl ItemsSource="{Binding MyModel.MyCollection}">
 <ItemsControl.ItemsPanel>
   <VirtualizingStackPanel/>
 </ItemsControl.ItemsPanel>
</ItemsControl>
于 2013-04-02T13:47:58.580 に答える