5 Stimmen

Ist es möglich, die Ansicht zu zwischenspeichern, wenn der Modell-First-Ansatz verwendet wird?

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?

7voto

Sergey Aldoukhov Punkte 21696

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:

3voto

blindmeis Punkte 21576

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X