這是一個更一般的問題... 我有一個用戶控件,我寫了(用戶控件,而不是自定義控件)。我使用的一個的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