我的代碼,因爲這一個:爲什麼在DataTemplate中使用UserControl比直接使用xaml慢?
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:MyViewModel}">
<!-- xaml is typed here directly -->
<Border>
...
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
和XAML的DataTemplate的內部大(超過200行)。
我想將DataTemplate中的xaml移動到單獨的UserControl中,以便更易於編輯和維護。我下一步:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:MyViewModel}">
<!-- xaml is moved to separate UserControl -->
<local:MyViewModelUserControl />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我遇到的問題是渲染/處理第二碼(與用戶控件)花費的時間比第一次長碼的2倍左右。任何想法如何處理它?
注:我正在移動的不是ListBox,而是DataTemplate中的xaml。原因不在於重用此代碼,而是爲了最小化放置ListBox的主文件。其他的事情是我在ListBox中有幾個DataTemplates(對於幾個ViewModel),而且xaml真的很大。這就是爲什麼我想將這個xaml(它在DataTemplate中)移動到一個單獨的控件。
我不是在移動ListBox,而是在DataTemplate中的xaml。原因是不重用此代碼,而是在放置ListBox的主文件中將其最小化。其他的事情是我在ListBox中有幾個DataTemplates(對於幾個ViewModel),而且xaml真的很大。這就是爲什麼我想將這個xaml(它在DataTemplate中)移動到一個單獨的控件。我也已將此信息添加到答案中。對不起,如果我描述的情況不明確。 – Sergey
但是,將數據模板定義在單獨的文件中對於更好的可維護性和可讀性來說並不那麼好。列表將具有其自己的數據模板或數據模板。這不是問題。如果創建可重用的列表控件,那很好。但是將你的數據模板移動到一個單獨的文件聽起來不太好。 – ViVi
我有一個UserControl顯示一個項目(的某些ViewModel)幷包含此項目的行爲。我把這個控件放在ListBox.ItemTemplate中。這就是你可以在問題的第二個代碼中看到的內容。而且它似乎在ListBox的ItemTemplate裏面使用UserControl比在ListBox.ItemTemplate中直接寫入相同的xaml要慢(你可以在上面的第一個代碼中看到它)。這是問題。 – Sergey