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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<Image Height="50" Source="{Binding MonImage}"/>
ModelView
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.