WPFのListBoxコントロールにDataContextを割り当てるときに、恐ろしいUIフリーズの問題を解決できないようです。DataContextフリーズを最適化する方法
私はWindow.Resourcesで定義されたDataTemplateを持っています。 アプリケーションが起動すると、ImageInfoには、URIパスやBitmapImageを含む、ロードされたイメージに関するさまざまな情報が格納されているリストのイメージが読み込まれ、ソートされます。
ListBoxコントロールのDataContextとしてこのリストを割り当てると、問題はありませんが、私は解決できないように見えますが、実際には巨大なフリーズが発生します。私はそうのようにDataContext割り当てる
<DataTemplate>
<Grid HorizontalAlignment="Left" Width="260" Height="360">
<Border Padding="5" Margin="10" BorderBrush="Orange">
<Image Source="{Binding image}" Stretch="Fill" HorizontalAlignment="Center"/>
</Border>
<Border Background="Black" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Opacity="0.70" Height="50" Margin="0,10,10,0"></Border>
<StackPanel VerticalAlignment="Bottom" Orientation="Horizontal" HorizontalAlignment="Center">
<!-- 3 buttons -->
</StackPanel>
</Grid>
</DataTemplate>
<ItemsPanelTemplate>
<UniformGrid Columns="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ItemsPanelTemplate>
:
lbGallery.DataContext = lst169;
リストは、10の以上の項目が含まれています。 BitmapImageとしてロードイメージをスキップし、代わりに使用してパス
からわずかURIを使用して
グリッド上のいくつかの仮想化オプションを試す
:
は、これまでのところ、私はして問題を解決しようとしましたグリッドの固定サイズ
私は起動時に一度だけデータを読み込むため、lst169でファイルを読み込む際に問題がコードに関係しないと確信しています。 BitmapImageの代わりにURIを使用すると、イメージを取得するための私のメソッドも問題ではないことが保証されました。
すべてが、そのDataContextをリストボックスコントロールに設定します。
これを行う適切な方法は何ですか?
ありがとうございます!
EDIT:
- アプリケーションは
- リソースデータは、(異なるイメージを持つ3つのリストが)一度
- リストにロードされて起動します:私のポストは、多くのユーザーを混乱されているので
明確にしますデータが完全にロードされたとき、ListBoxのDataContextとして完全にロードされたリストを1つ設定する
これはフリーズが発生したときです。
後でユーザーは、ボタンをクリックして画像を切り替えることができます。私はこの時間の間にもDataContextを切り替えます。フリーズが起こる。
Soフリーズは起動時にリソースを読み込むことによって発生しません。画像がImageコントロールにバインドされるとき、リストボックスのDataContextをListに設定することによって発生します。私がBitmapImage型、またはURIを絶対パスでバインドしているかどうかにかかわらず。
ルックに。フリーズがリソースの読み込み時間である場合、メインウィンドウ(スプラッシュウィンドウ "Loading ..")を表示する前にそれを行うか、非同期で行うか(例えば、アイテムを1つずつ追加するか、プレースホルダを追加してから実際のイメージをロードするなど) [仮想化](http://stackoverflow.com/q/25070178/1997232)。 – Sinatr