2013-02-20 178 views
0

這是一個更一般的問題... 我有一個用戶控件,我寫了(用戶控件,而不是自定義控件)。我使用的一個的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的項目源更改時創建新實例?

回答

0

看起來,usercontrols用作datagrid的DataTemplate列的原因會在數據網格的項目源發生更改時被銷燬並重新創建。在我的情況下,解決方案是使用正常的網格,因爲我的列表中始終有4個項目用作網格的項目源。這不是理想的,也不是N-item列表的解決方案..但在我的情況下,它大大提高了性能,因爲我的用戶控件在初始化時執行了一些密集的數據庫查找以緩存數據。

+0

從數據庫獲取數據並緩存它不是視圖的責任。這看起來像通常在winforms中發現的那種黑客。如果你有一個合適的架構,你就不需要訴諸這個了,因爲usercontrols在創建時實際上不需要做任何事情。 – 2013-02-21 01:03:33

+0

helpful..blame從5行xaml的建築。該控件允許消費者通過適配器/提供商提供數據。它使用分層模板將這些數據分組到最多4層。考慮到數據的大小,它相當高效。控制不是問題。它是使用這些控件的模板。當用戶從主列表中選擇時,數據網格的itemssource會發生變化。因爲ctl是數據網格的模板列,所以它被重新創建。那就是問題所在。你有解決方案嗎?或只是從5行xaml的廣泛批評? – mike01010 2013-02-21 01:58:34

+0

我不介意在用戶控件中構建一個完整的Explorer.exe Windows shell,但是,從數據庫獲取數據並緩存它不是視圖的責任。曾聽說過[關注分離](http://en.wikipedia.org/wiki/Separation_of_concerns)?它是一個相當新的概念,所以我明白如果你以前從來沒有聽說過它。它自1975年以來一直存在或其他事情。 – 2013-02-21 02:07:34

相關問題