[WPF XAML] Changer d'image à l'aide de Binding
Bonjour,
Je fait quelques test en WPF afin de migrer, par la suite, mon projet qui est actuellement en WinForm.
J'ai pas mal de souci, mais j'aurai besoin de votre aide sur les images. en respectant le Pattern MVVM.
Dans mon projet j'ai énormément d'image simulant des voyants, donc changeant d'image suivant la situation, voyant vert, rouge, gris, bleu etc...
J'ai réussi en utilisant des lien Uri:
XAML
Code:
1 2
|
<Image Height="50" Source="{Binding MonImage}"/> |
ModelView
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
Public Class ClsViewModele
Implements INotifyPropertyChanged
Public Timer1 As DispatcherTimer
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Overridable Sub OnPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
Private monModèle As ClsModele
Public Sub New()
monModèle = New ClsModele
_MonImage= monModèle.MonImage
ModificationModèle = False
Timer1 = New DispatcherTimer
AddHandler Timer1.Tick, AddressOf Timer1_Tick
Timer1.Interval = New TimeSpan(0, 0, 1)
Timer1.Start()
End Sub
Public Property MonImage As Uri
Get
Return Me._MonImage
End Get
Set(value As Uri)
Me._MonImage = value
OnPropertyChanged("MonImage")
If ModificationModèle = True Then
monModèle.MonImage = _MonImage
End If
End Set
End Property
'(Commandé par un checkbox)
Private _modificationModèle As Boolean
Public Property ModificationModèle As Boolean
Get
Return Me._modificationModèle
End Get
Set(ByVal value As Boolean)
Me._modificationModèle = value
OnPropertyChanged("ModificationModèle")
End Set
End Property
'Affectation de nouvelle image par le timer (pour essaie bien-sur)
Private alterne As Boolean
Private Sub Timer1_Tick(sender As Object, e As EventArgs)
Dim myPath As String
If alterne Then
myPath = System.AppDomain.CurrentDomain.BaseDirectory & "Lampe\Lampe_Eteinte.jpg"
If System.IO.File.Exists(myPath) Then
MonImage = New Uri(myPath, UriKind.RelativeOrAbsolute)
End If
Else
myPath = System.AppDomain.CurrentDomain.BaseDirectory & "Lampe\Lampe_Vert.jpg"
MonImage = New Uri(myPath, UriKind.RelativeOrAbsolute)
End If
alterne = Not alterne
End Sub |
Model
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Public Class ClsModele
Public MonImage As Uri
Public Sub New()
Dim myPath As String
myPath = System.AppDomain.CurrentDomain.BaseDirectory & "\Lampe\Lampe_Eteinte.jpg"
MonImage = New Uri(myPath, UriKind.RelativeOrAbsolute) '(My.Resources.Lampe_Eteinte, Image)
End Sub
End Class |
Cela fonctionne mais habituellement en WinForm j'utilise les ressources, cela m’évite d'avoir à fournir les photos dans le package d'installation de l'apli.
Y-a-t'il un moyen d'utiliser les Ressources?
En passant je suis pas sur que le pattern MVVM est bien respecté dans l'exemple ci dessous car la classe modèle ne sert pas à grand chose dans cette exemple.
Mais c'est un exemple que j'ai récupéré en C# que j'ai adapté en VB.net et je continu dessus mes expérience.
Je suis effectivement en VB.net, car mon projet est actuellement ainsi, mais comme je trouve peu d'information sur le WPF MVVM en vb.net je créer ce post sur Language/DotNet pour être plus général.
Merci pour votre aide.