这是一个更一般的问题... 我有一个用户控件,我写了(用户控件,而不是自定义控件)。我使用的一个的DataGridColumn此控件提供查找functionality..much这样的:每次datacontext更改时都会创建一个自定义usercontrol?
<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中自我刷新。
编辑:谷歌搜索没有提供任何明确的答案......但从我读过的,它可能是Datagrid这是问题。因为我的控件用于数据网格中,每当网格的项目源发生更改时,它是否会销毁并重新创建控件?我可以看到它在这么做..但不知道这是我所看到的原因。假设它是...是否有一种方法可以让datagrid重用usercontrol实例,而不是在datagrid的项目源更改时创建新实例?
从数据库获取数据并缓存它不是视图的责任。这看起来像通常在winforms中发现的那种黑客。如果你有一个合适的架构,你就不需要诉诸这个了,因为usercontrols在创建时实际上不需要做任何事情。 – 2013-02-21 01:03:33
helpful..blame从5行xaml的建筑。该控件允许消费者通过适配器/提供商提供数据。它使用分层模板将这些数据分组到最多4层。考虑到数据的大小,它相当高效。控制不是问题。它是使用这些控件的模板。当用户从主列表中选择时,数据网格的itemssource会发生变化。因为ctl是数据网格的模板列,所以它被重新创建。那就是问题所在。你有解决方案吗?或只是从5行xaml的广泛批评? – mike01010 2013-02-21 01:58:34
我不介意在用户控件中构建一个完整的Explorer.exe Windows shell,但是,从数据库获取数据并缓存它不是视图的责任。曾听说过[关注分离](http://en.wikipedia.org/wiki/Separation_of_concerns)?它是一个相当新的概念,所以我明白如果你以前从来没有听说过它。它自1975年以来一直存在或其他事情。 – 2013-02-21 02:07:34