0

我有一个使用 aParentObject作为其 DataContext 的控件。ParentObject有一个称为ChildObject可能更改的属性。当它发生时,ParentObject引发 PropertyChanged 事件。

该控件具有 XAML来ListView为. 当 中的属性更改时,将重新创建整个视图,这意味着实例化了新控件。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) 您是否研究过虚拟化?这只会渲染可见的内容。如果您有大量对象,您肯定要考虑这一点。

2)您是否考虑过重新设计您的视图模型以最大限度地减少您的收藏品的变化?而不是在错误发生变化时添加/删除对象。重复使用集合中的对象,并且仅在总计数发生变化时添加/删除。

我已经完成了这两项以减缓视图模型对视图的更改。它们都显着提高了性能,但我在屏幕上有数百个对象。

于 2012-08-30T16:26:10.260 回答