是每次数据上下文更改时创建的自定义用户控件

本文关键字:创建 自定义 用户 控件 数据 上下文 | 更新日期: 2023-09-27 18:00:08

这更像是一个一般性的问题。。。我已经编写了一个用户控件(UserControl,而不是Custom control)。我在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的构造函数。这是预期的行为吗?无论如何要防止这种情况发生?因为我不明白为什么这是必要的。。。我认为,控件的单个实例应该能够从datacontext中刷新自己。

编辑:谷歌搜索没有提供任何明确的答案。。。但据我所知,问题可能出在数据网格上。由于我的控件是在数据网格中使用的,每次网格的itemsource发生变化时,它是否会销毁并重新创建控件?我觉得这样做是有道理的……但不确定这是否是我所看到的原因。假设是……当数据网格的项源发生变化时,有没有一种方法可以让数据网格重用用户控件的实例,而不是创建新的实例?

是每次数据上下文更改时创建的自定义用户控件

当数据网格的项源发生更改时,用作数据网格的DataTemplate列的原因用户控件似乎被销毁并重新创建。在我的例子中,解决方案是使用一个普通的网格,因为我的列表中总是有4个项目用作网格的项目源。这并不理想,也不是N项列表的解决方案。。但在我的情况下,它大大提高了性能,因为我的usercontrol在初始化缓存数据时执行了一些密集的数据库查找。