Ich habe mehrere Ressourcen in XAML-Markup deklariert und möchte auf die Ressourcen in meinem View-Modell zugreifen. Ich könnte leicht etwas foo.Resources["resourceKey"] or findResource("")
verwenden, aber das würde bedeuten, dass ich meinen XAML- und C # -Code eng zusammenkoppeln müsste. Nicht das, was ich vorhatte, als ich anfing MVVM zu benutzen.
Gibt es eine bewährte Methode oder eine beliebige Methode zum Verwenden von Ressourcen, die in der Ansicht im Ansichtsmodell definiert sind?
Bei den Ressourcen handelt es sich hauptsächlich um Symboldefinitionen, die das Erscheinungsbild von Symbolen in ESRI-Maps definieren. Zum Beispiel:
%Vor%Die Symbole werden der Karte programmatisch hinzugefügt, obwohl ich sie in meinem Ansichtsmodell verwenden muss.
Wenn Sie wirklich auf Styles / Templates von der View-Model-Ebene zugreifen möchten, können Sie die Styles in ein separates ResourceDictionary (nehmen wir an, Sie nennen es SymbolTemplates.xaml
) einfügen und das in:
(Ich habe herausgefunden, dass dieser Ansatz am besten funktioniert, wenn Sie die Build-Aktion für SymbolTemplates.xaml
auf Inhalt setzen.)
Ein MVVM-ähnlicher Ansatz würde darin bestehen, dass der View-Model-Layer den "Typ" jedes Symbols freilegt. Dieser Typ würde die Vorlage oder den Stil festlegen, der auf jedes Symbol angewendet wird, das der Ansicht hinzugefügt wird. Sie würden dann einen IValueConverter um den Symboltyp in den anzuwendenden Stil oder die Vorlage zu konvertieren. Dieser Wertkonvertierer müsste das Ressourcenwörterbuch laden, aber da Wertkonverter in der Ansichtsschicht leben, bricht MVVM nicht ab.
Zuerst sollten Sie sich fragen, warum Sie auf Ihre XAML-Ressourcen von der VM aus zugreifen möchten.
Es gibt viele Möglichkeiten, auf die XAML-Ressourcen von der VM aus zuzugreifen und sie zu bearbeiten. Die Frage ist erneut, warum Sie das tun möchten.
Wenn Sie beispielsweise eine Animation ausführen möchten, sollten Sie ein Ereignis von der VM auslösen und die Animation ausführen. auf der Benutzeroberfläche, ohne dass die VM über diese bestimmte Animation informiert ist (Auschecken dies für Beispiele).
Das Ziel von ViewModel ist es, es von der Benutzeroberfläche unabhängig zu halten, so dass Sie es maximal entkoppeln können.