每次datacontext更改时是否创建了自定义用户控件?

时间:2013-02-20 02:40:12

标签: c# .net wpf xaml

这是一个更普遍的问题...... 我有一个用户控件,我写的(UserControl,而不是自定义控件)。我在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改变时,它是否会破坏并重新创建控件?我可以看到这样做的感觉..但不确定这是否是我所看到的原因。假设它是......有没有办法让datagrid重用usercontrol的实例,而不是在datagrid的itemsource更改时创建新的实例?

1 个答案:

答案 0 :(得分:0)

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