0

这是一个更普遍的问题......我有一个我编写的用户控件(用户控件,而不是自定义控件)。我在 DataGridColumn 中使用这个控件来提供查找功能。就像这样:

                <DataGridTemplate ColumnHeader="Company">
                   <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <lookupCtl:LookUpCTL SelectedCompany="{Binding Company, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                           CompanyChangedCommand="{Binding DataContext.CompanyChangedCmd, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

我注意到的是,每当父/包含控件的 dataconext 更改时,就会调用 LookUpCTL 的构造函数。这是预期的行为吗?无论如何要防止这种情况?因为我不明白为什么这有必要......控件的单个实例应该能够从我认为的数据上下文中刷新自己。

编辑:谷歌搜索没有提供任何明确的答案......但从我读过的内容来看,问题可能是Datagrid。由于我的控件在数据网格中使用,每次网格的 itemsource 更改时,它会破坏并重新创建控件吗?我可以看到这样做的意义..但不确定这是否是我所看到的原因。假设它是......有没有办法让数据网格重用用户控件的实例,而不是在数据网格的 itemsource 更改时创建新实例?

4

1 回答 1

0

看起来,当数据网格的 itemsource 发生更改时,用作数据网格的 DataTemplate 列的用户控件被破坏并重新创建的原因。就我而言,解决方案是使用普通网格,因为我的列表中始终有 4 个项目用作网格的 itemsource。这不是理想的,也不是 N 项列表的解决方案。但在我的情况下,它极大地提高了性能,因为我的用户控件在初始化缓存数据时执行了一些密集的数据库查找。

于 2013-02-20T07:13:45.847 回答