2010-03-28 7 views
7

J'utilise MVVM et j'essaie de créer une base de données avec la propriété Source de Image à mon ViewModel de telle sorte que je puisse changer l'icône à la volée. Quel est le meilleur modèle à suivre pour cela? J'ai toujours la possibilité de changer mon ViewModel en conséquence, mais je ne sais pas par où commencer dans xaml ou ViewModel.WPF databind Image.Source dans MVVM

Pour être clair, je ne veux pas que mon ViewModel connaisse les images spécifiques (c'est-à-dire pour le View to Know), juste l'état qui déclenche des images différentes. Pour l'instant je n'ai que deux états, disons Rouge et Vert. Dois-je créer une propriété Enum ou un booléen? Et puis comment puis-je databind pour basculer la source d'image?

Répondre

10

Vous pouvez utiliser un DataTrigger et modifier l'image (entièrement en XAML) en fonction de la valeur d'une propriété dans votre ViewModel. Personnellement, j'utiliserais une énumération, puisque vous pourriez vouloir plusieurs états.

VisualStateManager travaillera pour cela aussi, mais il faudra WPF ou à terme 4. .NET

Pour utiliser un DataTrigger, vous pouvez faire quelque chose comme:

<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> 

Cela utilisera " 1.png ", mais lorsque votre énumération est définie sur" Image2 "dans la machine virtuelle, elle passe à 2.png. Davantage de DataTriggers peuvent être ajoutés si nécessaire.

+0

J'utilise .Net 4. Pourriez-vous élaborer sur ce point? Peut-être un exemple? – BrettRobi

+0

Je seconde la solution de Reed. Utilisez une énumération dans votre viewmodel et un datatrigger dans votre vue. http://msdn.microsoft.com/en-us/library/system.windows.datatrigger.aspx –

+0

@BrettRobi: voilà –