Wie kann ich angeben von Ressourcen, die in einer MVVM-view-Modell?

Angenommen, ich möchte, um zu zeigen, Liste von Objekten, wobei jedes Objekt soll einen Namen und ein passendes Bild (z.B. Einträge mit Icons oder buttons mit text und Bild).

Alle Beispiele und Programme ausgesetzt, das Bild im viewmodel als einen Pfad zu einer PNG-Datei und dann gebunden die Source einer Image zu. Aber was ist, wenn ich will, Vektor-Bilder (beispielsweise als DrawingImage in einem lokalen ResourceDictionary)? Freilegung der DrawingImage aus dem view-Modell scheint schlecht, weil ich hätte, um zu speichern einen Verweis auf die Anwendung/Fenster/Benutzer control/... (und es wird empfohlen, nicht aussetzen, solche XAML-Objekte von der view-Modelle).

Damit ein besserer Ansatz wäre die Verwendung eines string-Bezeichner in der Ansicht Modell-und irgendwie dann wählen Sie die entsprechende Ressource. Wenn dieser Bezeichner wird der Ressource-Schlüssel dieses snippet sieht verlockend, aber funktioniert nicht:

<Image Source="{StaticResource {Binding Icon}}"/>

Fand ich zwei Möglichkeiten, dass, obwohl Sie nicht für mich arbeiten.

  1. Die erste war die mit einer normalen Bindung auf das Symbol mit einem Konverter, der aussah, bis die Ressource in Application.Current. Dies funktioniert nicht, wenn die Ressource an einem anderen Ort gespeichert ich denke (und die situation, wo ich anfangs traf dieses problem hatte keine Anwendung läuft noch, da es ein Fenster Auswahl der Anwendung zum starten!).

  2. Die zweite Lösung, war mit einer markup-Erweiterung abgeleitet von StaticResourceExtension bringen Ihre ResourceKey von der übergebenen binding:

    <Image Source="{local:BindableStaticResource {Binding Icon}"/>

    Dieser sieht wirklich ordentlich, da könnte es lokale Ressourcen nutzen, auch für andere Dinge. Aber wenn Sie es bekam ich immer eine Ausnahme ("Ressource namens {FooIcon} konnte nicht gefunden werden.", zeigt die richtige XAML-Datei und position der Erweiterung). Sogar eine leere Ressource-Erweiterung abgeleitet von StaticResourceExtension dass soeben die Ressource-Taste, um den Basis-Konstruktor hat nicht funktioniert, und ich kann nicht erklären, warum. Nur mit StaticResourceExtension hat Prima funktioniert.

Irgendwelche Ideen, wie ich das Problem beheben könnte der zweite Ansatz, oder noch besser Lösungen?

Bearbeiten

Bemerkte ich, dass es hat funktionieren, wenn direkt verwendet, wie diese:

<Window>
    <Window.Resources>
        <DrawingImage x:Key="SomeIcon"/>
    </Window.Resources>
    <Image Source="{BindableStaticResource {Binding Icon}}"/>
</Window>

aber schlägt fehl, zum Beispiel in einem DataTemplate. Obwohl eine normale StaticResourceExtension arbeiten beide Male, also bin ich verwirrt, was ist falsch gehen.

InformationsquelleAutor gix | 2009-07-08
Schreibe einen Kommentar