0

ParentObjectDataContextとしてを使用するコントロールがあります。には、変更される可能性のParentObjectあるというプロパティChildObjectがあります。その場合ParentObject、PropertyChangedイベントが発生します。

コントロールには、のプロパティListView内のアイテムのを定義するXAMLがあります。でプロパティが変更されると、ビュー全体が再作成されます。つまり、新しいコントロールがインスタンス化されます。ListChildObjectChildObjectParentObject

これListViewは実際には以下の例よりもはるかに複雑であるため、再作成にはプロセッサが集中し、時間がかかります。

私の他のオプションは何ですか?ListViewそれぞれの全体をキャッシュできますChildObjectか?どうすればいいですか?

<ListView ItemsSource="{Binding ParentObject.ChildObject.List}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Error">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <local:ErrorControl DataContext="{Binding ErrorCollection}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>
4

1 に答える 1

1

リストビューは、データ テンプレートのために新しいコントロールを作成しています。データ テンプレートを使用すると、データのインスタンスとデータ テンプレート内のコントロールの間に 1 対 1 の関係があります。いくつかのオプションがあります:

1) 仮想化について検討しましたか? これは、目に見えるものだけをレンダリングします。オブジェクトの数が多い場合は、これを検討する必要があります。

2) コレクションの変更を最小限に抑えるためにビューモデルを作り直すことを考えたことはありますか? エラーが変化するたびにオブジェクトを追加/削除する代わりに。コレクション内のオブジェクトを再利用し、合計数が変更された場合にのみ追加/削除します。

ビューモデルからのビューへの変更を遅くするために、これらの両方を行いました。どちらもパフォーマンスを大幅に向上させましたが、画面上に何百ものオブジェクトがありました。

于 2012-08-30T16:26:10.260 に答える