У меня есть код, как этот:Почему использование UserControl внутри DataTemplate медленнее, чем прямой 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 линий).
Я хочу переместить xaml, находящийся внутри DataTemplate, в отдельный 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>
Проблема я бегу в том, что рендеринг/обработка второго кода (с UserControl) занимает около 2 раза больше, чем 1-го кода. Есть идеи, как с этим бороться?
ПРИМЕЧАНИЕ. Я перемещаю не ListBox, а xaml, который находится внутри DataTemplate. Причина заключается не в том, чтобы повторно использовать этот код, а для сведения к минимуму основного файла, в который помещается ListBox. Другое дело, что у меня есть несколько DataTemplates внутри ListBox (для нескольких ViewModels), и xaml действительно огромна. Вот почему я хочу переместить этот xaml (который находится внутри DataTemplate) в отдельный элемент управления.
Я перемещаю не ListBox, а xaml, который находится внутри DataTemplate. Причина заключается не в повторном использовании этого кода, а в том, чтобы свести его к минимуму в основном файле, где размещается ListBox. Другое дело, что у меня есть несколько DataTemplates внутри ListBox (для нескольких ViewModels), и xaml действительно огромна. Вот почему я хочу переместить этот xaml (который внутри DataTemplate) в отдельный элемент управления. Я также добавил эту информацию в ответ. Извините, если я не описал это дело. – Sergey
Но определение шаблонов данных в отдельном файле не так хорошо для лучшей ремонтопригодности и удобочитаемости. Список будет иметь собственную таблицу данных или datatemplates. Это не проблема. Если вы создаете элемент управления многократным списком, это нормально. Но перемещение вашего datatemplate в отдельный файл не звучит так хорошо. – ViVi
У меня есть UserControl, который отображает элемент (некоторого ViewModel) и содержит поведение этого элемента. Я помещаю этот элемент управления в ListBox.ItemTemplate. Это то, что вы можете видеть во втором коде в вопросе. И оказалось, что использование UserControl внутри ItemTemplate в ListBox медленнее, чтобы написать тот же самый xaml непосредственно внутри ListBox.ItemTemplate (вы можете увидеть его в первом коде выше). Это проблема. – Sergey