2013-09-24 35 views
10

設定の影響についての情報はほとんどありません。WPF DataGridのEnableRowVirtualizationとVirtualizingStackPanel.IsVirtualizingプロパティの違い

VirtualizingStackPanel.IsVirtualizing="True" 

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

誰かが違いが何であるかを明確にすることはできますか?

また、EnableRowVirtualizationとEnableColumnVirtualizationが実際に3.5グリッドで何かを実行するかどうかを明確にすることはできますか?

ありがとうございました。

答えて

10

IsVirtualizingEnableRowVirtualization/EnableColumnVirtualizationは同じ原則で動作します。つまり、必要なときにアイテムが視覚化され、コンテナが再利用されます。

基本的に、Panel(またはGrid)が表示される内容を追跡し、これが変更された場合、それは大きさに、内部クラス、'ItemContainerGenerator'を使用して、新しいアイテム(http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx)を構築します。

双方の動機付けは、コンテナがオンデマンドでのみ生成されるため、メモリを節約し、パフォーマンスを向上させることです。

なぜ2つありますか:Panelは、水平方向または垂直方向の一方向にのみ設計されています。彼らはそれのための単一の接続されたプロパティを実装しました。一方、Gridは2次元に拡張されているため、各次元にプロパティを実装しています。

IsVirtualizingは添付のプロパティで、Gridの対応するプロパティはネイティブプロパティです。彼らはこの違いを選んだ理由として手掛かりは...

関連リンクはhttp://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.enablerowvirtualization(v=vs.100).aspxhttp://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.isvirtualizing.aspx

+1

EnableRowVirtualization/EnableColumnVirtualizationプロパティの方向に関する興味深い明確ではありません。/EnableRowVirtualization/EnableColumnVirtualizationプロパティの代わりに、接続プロパティを設定することの影響をさらに明確にすることはできますか?彼らは同じ種類の動作をオン/オフすることを理解していますが、一方を他方の上で使用できるかどうか、つまり完全に重複する責任を持っているのか、 – Julius

+0

この動作は* ItemsControl *レベルで実装されているため、それから派生したクラスにも影響します。 'Under the hood'では、方向性以外のアルゴリズムには目立つ違いはありません。また、ネイティブプロパティーが利用可能なときに使用する必要があるので、それは実際には他の設定よりも1つの設定を使用する選択肢ではありません。 –

関連する問題