Ich habe Code wie diese:Warum ist die Verwendung von UserControl in DataTemplate langsamer als direktes XAML?
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:MyViewModel}">
<!-- xaml is typed here directly -->
<Border>
...
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Und XAML in der Datatemplate groß ist (mehr als 200 Zeilen).
Ich möchte xaml, das sich in der DataTemplate befindet, in ein separates UserControl verschieben, um die Bearbeitung und Pflege zu vereinfachen. Ich als nächstes tun:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:MyViewModel}">
<!-- xaml is moved to separate UserControl -->
<local:MyViewModelUserControl />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Das Problem, das ich in laufen, ist, dass Rendering/Verarbeitung des zweiten Codes (mit Usercontrol) etwa 2-mal länger als der erste Code nimmt. Irgendwelche Ideen, wie man damit umgeht?
HINWEIS: Ich verschiebe nicht die ListBox, aber die XAML, die in der DataTemplate ist. Der Grund ist nicht, diesen Code wiederzuverwenden, sondern die Hauptdatei zu minimieren, in der die ListBox platziert ist. Andere Sache ist, dass ich mehrere DataTemplates innerhalb der ListBox habe (für mehrere ViewModels) und die XAML ist wirklich riesig. Deshalb möchte ich dieses XAML (das sich in der DataTemplate befindet) in ein separates Steuerelement verschieben.
Ich verschiebe nicht die ListBox, aber die XAML, die in der DataTemplate ist. Der Grund besteht nicht darin, diesen Code wiederzuverwenden, sondern ihn in der Hauptdatei zu minimieren, in der die ListBox platziert ist. Andere Sache ist, dass ich mehrere DataTemplates innerhalb der ListBox habe (für mehrere ViewModels) und die XAML ist wirklich riesig. Deshalb möchte ich dieses Xaml (das in der DataTemplate enthalten ist) in ein separates Steuerelement verschieben. Ich habe diese Information zur Antwort hinzugefügt. Entschuldigung, wenn ich den Fall nicht klar beschrieben habe. – Sergey
Das Definieren von Datenvorlagen in einer separaten Datei ist jedoch nicht so gut für eine bessere Wartbarkeit und Lesbarkeit. Eine Liste hat ihre eigenen Datamaplates oder Datatemplates. Es ist kein Problem. Wenn Sie ein wiederverwendbares Listensteuerelement erstellen, ist es in Ordnung. Aber das Verschieben des Datenträgers in eine separate Datei klingt nicht so gut. – ViVi
Ich habe ein Benutzersteuerelement, das ein Element (eines ViewModel) anzeigt und das Verhalten dieses Elements enthält. Ich habe dieses Steuerelement in die ListBox.ItemTemplate eingefügt. Das können Sie im zweiten Code der Frage sehen. Und es scheint, dass die Verwendung von UserControl in ItemTemplate der ListBox langsamer ist als das Schreiben desselben xaml direkt in ListBox.ItemTemplate (Sie können es im 1. Code oben sehen). Das ist das Problem. – Sergey