2010-03-28 14 views
7

Ich benutze MVVM und versuche, die Source-Eigenschaft von Image zu meinem ViewModel in einer solchen Weise zu dabinden, dass ich das Symbol im laufenden Betrieb ändern kann. Was ist das beste Muster dafür? Ich habe immer noch die Flexibilität, mein ViewModel anzupassen, aber ich weiß nicht, wo ich im xaml oder ViewModel anfangen soll.WPF Databind Image.Quelle in MVVM

Um klar zu sein, möchte ich nicht mein ViewModel über die spezifischen Bilder wissen (das ist für die Ansicht zu wissen), nur der Zustand, der verschiedene Bilder auslöst. Fürs Erste habe ich nur zwei Zustände, sagen wir Rot und Grün. Sollte ich eine Enum-Eigenschaft oder eine Bool erstellen? Und wie kann ich dann die Bildquelle umschalten?

Antwort

10

Sie können einen DataTrigger verwenden und das Bild (vollständig in XAML) basierend auf dem Wert einer Eigenschaft in Ihrem ViewModel ändern. Ich persönlich würde ein Enum verwenden, da Sie mehrere Zustände haben möchten.

Visual als auch für dies funktionieren wird, aber WPF Futures erfordern oder .NET 4.

Um eine Datatrigger verwenden möchten, können Sie so etwas wie tun:

<Image> 
    <Image.Style> 
    <Style TargetType="Image"> 
     <Setter Property="Source" Value="1.png" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding ViewModelEnumProperty}" Value="Image2"> 
      <Setter Property="Source" Value="2.png" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Image.Style> 
</Image> 

Dies wird verwenden " 1.png ", aber wenn Ihre Enum in der VM auf" Image2 "eingestellt ist, würde sie zu 2.png wechseln. Weitere DataTriggers können nach Bedarf hinzugefügt werden.

+0

Ich benutze .Net 4. Könnten Sie das vielleicht noch weiter ausführen? Vielleicht ein Beispiel? – BrettRobi

+0

Ich zweite Reed-Lösung. Verwenden Sie eine Aufzählung in Ihrem Ansichtsmodell und einen Datentrigger in Ihrer Ansicht. http://msdn.microsoft.com/en-us/library/system.windows.datatrigger.aspx –

+0

@BrettRobi: da gehen Sie –