IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Petit Probleme MVVM SIlverlight


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 17
    Par défaut Petit Probleme MVVM SIlverlight
    Bonjour à tous!

    J'ai repris un pseudo modèle MVVM C# que j'ai trouvé sur le net et passé tant bien que mal en VB (On ne se moque pas), j'arrive à exposer ma Collection à l'UI , mais rien en se passe

    lorsque j'ajoute une element à celle ci, voici le code:

    Ma classe PLACE

    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
    Imports System.Collections.ObjectModel
    Imports System.ComponentModel
     
    Public Class Place
     
     
     
     
     
        Private m_Titre As String
        Private m_Description As String
     
     
     
        Public Property Titre() As String
            Get
                Return m_Titre
            End Get
            Set(ByVal value As String)
                m_Titre = value
            End Set
        End Property
     
        Public Property Description() As String
            Get
                Return m_Description
            End Get
            Set(ByVal value As String)
                m_Description = value
            End Set
        End Property
     
     
     
     
        Public Sub New(ByVal Titre As String, ByVal Description As String)
            m_Titre = Titre
            m_Description = Description
              End Sub
    End Class
    Ma classe ViewModelBase
    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
    Imports System.ComponentModel
     
    Public Class ViewModelBase(Of T As ViewModelBase(Of T))
        Implements INotifyPropertyChanged
     
     
        Public Event PropertyChanged As PropertyChangedEventHandler _
            Implements INotifyPropertyChanged.PropertyChanged
     
        Private Sub NotifyPropertyChanged(ByVal info As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
        End Sub
     
     
     
    End Class
    Ma classe PlacesService
    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
    Public Class PlacesService
     
     
        Public Function GetAll() As IEnumerable(Of Place)
     
     
     
     
     
     
            Dim Places As New List(Of Place)
     
     
     
            Places.Add(New Place("Test1", "Description "))
            Places.Add(New Place("Test 2", "Description 2"))
     
     
     
     
     
     
     
     
     
     
            Return Places
        End Function
     
     
     
    End Class
    Ma classe PlacesViewModel
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Imports System.Collections.ObjectModel
     
    Public Class PlacesViewModel
        Inherits ViewModelBase(Of PlacesViewModel)
     
     
        Private ReadOnly PlaceService As New PlacesService()
     
     
     
        Public Sub New()
     
     
            AvailablePlaces = New ObservableCollection(Of Place)()
     
     
     
            Dim recipes = PlaceService.GetAll()
     
     
     
     
            AvailablePlaces.AddRange(recipes)
        End Sub
     
     
     
        Private _AvailablePlaces As ObservableCollection(Of Place)
        Public Property AvailablePlaces() As ObservableCollection(Of Place)
     
     
            Get
                Return _AvailablePlaces
            End Get
            Set(ByVal value As ObservableCollection(Of Place))
                _AvailablePlaces = value
            End Set
        End Property
     
     
    End Class
     
     
    Public Module ObservableCollectionsExtensions
        Sub New()
        End Sub
     
     
        <System.Runtime.CompilerServices.Extension()> _
        Public Sub AddRange(Of T)(ByVal collection As ObservableCollection(Of T), ByVal items As IEnumerable(Of T))
     
     
            If collection Is Nothing Then
     
                Throw New ArgumentNullException("collection")
            End If
     
     
     
            If items Is Nothing Then
     
                Throw New ArgumentNullException("items")
            End If
     
     
     
            For Each item In items
     
     
     
                collection.Add(item)
     
            Next
        End Sub
     
     
     
        <System.Runtime.CompilerServices.Extension()> _
        Public Sub Replace(Of T)(ByVal collection As ObservableCollection(Of T), ByVal items As IEnumerable(Of T))
     
     
            If collection Is Nothing Then
     
                Throw New ArgumentNullException("collection")
            End If
     
     
     
            If items Is Nothing Then
     
                Throw New ArgumentNullException("items")
            End If
     
     
     
            collection.Clear()
     
     
            collection.AddRange(items)
        End Sub
     
    End Module
    Dans mon App.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <local:PlacesViewModel x:Key="ViewModelDataSource2"></local:PlacesViewModel>
    L'affichage des données se passe bien, cependant, il ne se passe rien lorsque j'ajoute un objet à ma collection. Je pense qu'il me manque

    quelque chose mais là j'ai du mal à cerner. Quelqu'un aurait-il une idée? Merci

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Comment tu fais ton ajout à ta collection ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 17
    Par défaut Reponse
    Tout d'abord merci de te pencher sur mon cas.

    Pour l'ajout, ayant moi aussi l'impression que le probleme venait de là, et bien j'ai tout essayé, actuellement je fais:


    Je déclare (Dans Mon MainPage.xaml.vb):
    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
     
     
    Imports System.ComponentModel
     
     
     
     
     
    Partial Public Class MainPage
        Inherits UserControl
     
        Public model As PlacesViewModel
     
        Public Sub New()
            InitializeComponent()
     
     
     
     
     
            model = New PlacesViewModel
     
     
     
     
     
        End Sub
     
     
     
     
     
     
     
        Private Sub NkButton_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
     
    'J'ai essayé ça en premier lieu sans succes
             model.AvailablePlaces.add(New Place("hjjlkjlkj", "kmlkmlkmlk",))
     
     
     
            'J'ai tenté d'aller dans cette direction aussi en tatonnant
    dim LaPlace as  New Place("hjjlkjlkj", "kmlkmlkmlk")
            ' ObservableCollectionsExtensions.AddRange(model.AvailablePlaces, LaPlace)
     
        End Sub
    End Class

    Je passe à côté d'un truc j'imagine, mais je n'ai pas encore assez de pratique pour trouver. Il doit falloir rajouter une méthode AddCollection quelque part, mais d'une je ne vois pas à quel niveau et de 2, je ne suis pas sur de savoir comment Notifier du changement. pour ton aide

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je pense que tu n'as donné tous les éléments nécessaires... où est le lien entre ta collection AvailablePlaces et l'UI ? Tu fais un binding dessus quelque part ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 17
    Par défaut La suite
    En effet, j'avais était trop exhaustif avec vous de ce coté la, voici le code XAML pour l'UI:

    Voila. Quand je rajoute un élement avec ma méthode de sagouin, j'ai l'impression qu'il s'ajoute bien à la collection (en suivant debug) mais rien de soulevé, rien ne se passe en visuel sur l'UI..Je ne suis pas certain non plus du portage que j'ai fait depuis C#, enfin disons que les pistes possibles d'erreurs sont trop nombreuses pour moi pour que je reste sans demander de l'aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <local:PlacesViewModel x:Key="ViewModelDataSource2"></local:PlacesViewModel>
    <ListBox DataContext="{StaticResource ViewModelDataSource2}" ItemsSource="{Binding AvailablePlaces}">
     
            </ListBox>

  6. #6
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    D'aprés ce que j'ai compris de ton code (mais je m'y connais pas trop en VB)

    Le model que tu déclare dans le Xaml et celui que tu instancie dans le codebehind sont deux PlacesViewModel différent.

    Grosso modo: tu ajoute dans un PlacesViewModel et tu affiche un autre.

    Il faut donc que tu l'instancie d'uin coté et que tu le récupère de l'autre.

    Par exemple dans le code behind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public model As PlacesViewModel
     
    Public Sub New()
            InitializeComponent()   
     
            model = New PlacesViewModel
            me.DataContext = model
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  2. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  3. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  4. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo