Umgang mit DataTemplates

  • Gibt es eine offensichtliche Methode für den Umgang mit DataTemplates, die mir nicht bekannt ist?

    Zum Beispiel:

    Ich habe ein ContentControl, mit dem die verschiedenen Anwendungsansichten angezeigt werden. Soweit mir bekannt ist, kann für jedes Steuerelement ein DataTemplate pro DataType vorhanden sein. (Das heißt, ich könnte dem ResourceDictionary ein DataTemplate hinzufügen, um eine Detailansicht anzuzeigen, wenn für das ContentControl ein PersonViewModel als DataContext oder eine ListView festgelegt ist, wenn für das ContentControl ein PersonManagerViewModel als DataContext festgelegt ist). Wie kann ich jedoch zwischen einer DetailsView und einer EditView wählen, wenn der DataContext des ContentControl auf ein PersonViewModel gesetzt ist?

    22 November 2011
    GEOCHETBrady
2 answers
  • Die flexibelste Lösung ist die Verwendung einer DataTemplateSelector , damit Sie programmgesteuert auswählen welche Vorlage verwendet werden soll, basierend auf den gewünschten Bedingungen.

    Eine andere Alternative, die wir an einigen Stellen verwendet haben, ist die Verwendung mehrerer ViewModels. In Ihrem Fall könnten Sie ein ReadOnlyPersonViewModel für die DetailsView und ein MutablePersonViewModel für die EditView haben.

    22 November 2011
    Marty Dill
  • Einige Optionen:

    1. Verwenden Sie beim Definieren von Ansichtsmodellen für "Regionen" immer eine 1: 1-Map zwischen einem ViewModel und eine Ansicht. Dies ist der typischste Ansatz. Wenn Sie daran denken, dasselbe ViewModel für mehrere Ansichten zu verwenden, ist es wahrscheinlich, dass das ViewModel zu viel tut. Die gemeinsam genutzte Logik gehört wahrscheinlich zu ihrer eigenen Model-Klasse, die zwei oder mehr verschiedene ViewModel-Klassen verwenden würden.

    2. Definieren Sie einen benutzerdefinierten DataTemplateSelector, um zwischen möglichen Übereinstimmungen zu unterscheiden. Dies ist ein wenig hässlicher, da Sie nicht mehr über das nette magische Verhalten "find the default" verfügen.

    3. Lassen Sie nur eine der Vorlagen als "default" zu. . Auf andere Vorlagen müssen die spezifischen Ansichten, für die sie erforderlich sind, per Schlüssel referenziert werden.

    22 November 2011
    Dan Bryant