In unserem Produkt verwenden wir den MVVM-Modell-First-Ansatz und es funktioniert gut, aber mit einem Vorbehalt. Wenn die Ansicht komplex wird, dauert es etwas länger, sie aus der Datenvorlage zu erstellen. Wenn die Ansicht häufig angezeigt und ausgeblendet wird, wird es leicht irritierend. Wenn die Ansicht zuerst verwendet wird, wäre es einfach genug, eine Ansicht bei Bedarf zu zwischenspeichern - aber wenn DataTemplate und Modell zuerst verwendet werden, haben wir nicht viel Kontrolle über die Ansichtserstellung. Hat schon jemand dieses Problem gelöst, ohne auf die Ansicht-zuerst-Methode umzusteigen?
Antworten
Zu viele Anzeigen?Funktioniert wunderbar, wenn man die Idee von @blindmeis verwendet.
Das Gesamtrezept:
Erstellen Sie ein ContentControl oder UserControl mit dem Namen ViewCache:
public partial class ViewCache
{
public ViewCache()
{
InitializeComponent();
Unloaded += ViewCache_Unloaded;
}
void ViewCache_Unloaded(object sender, RoutedEventArgs e)
{
Content = null;
}
private Type _contentType;
public Type ContentType
{
get { return _contentType; }
set
{
_contentType = value;
Content = ViewFactory.View(value); // Verwenden Sie Ihre Lieblingsfabrik
}
}
}
Verwenden Sie im DataTemplate den ViewCache und geben Sie den Typen der tatsächlichen Ansicht an, die Sie verwenden möchten:
Mit dem Viewmodel-First-Ansatz denke ich, dass du keine Chance hast, die Ansicht "zu cachen". Also könntest du in Betracht ziehen, zuerst die Ansicht zu verwenden und einen Viewmodel-Locator für die aufwändigen Datenvorlagen-Workflows zu verwenden. Hier ist eine Lösung für die Verwendung von Datenvorlagen mit Listen.
Aber vielleicht gibt es eine Lösung, um den WPF-Datenvorlagenmechanismus zu überschreiben?
Bearbeitet: Was ist, wenn du einfach einen "Marker View" für dein Viewmodel erstellst, damit die WPF-Datenvorlage es finden kann. Und dann innerhalb dieser Markeransicht die eigentliche Ansicht erstellst/wiederherstellst? So etwas wie ein Ansichtsservice-Locator?