Précédent   Forum des professionnels en informatique > Dotnet > Développement Windows > Windows Presentation Foundation
Windows Presentation Foundation Forum d'entraide sur le développement d'applications Windows avec Windows Presentation Foundation
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 22/06/2009, 16h34   #1
Modérateur
 
Avatar de Robin56
 
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 1 153
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 153
Points : 2 488
Points : 2 488
Par défaut Modèle MVVM - Implémentation ICommand

Bonjour,

Je suis nouveau sur le forum, sur WPF et même sur techno. .NET en général
Et donc je suis en ce moment à la mise en place d'une application simple sur le modèle MVVM à partir de la vidéo assez connu sur le sujet de Jason Dolinger.

Je précise que je développe en VB.NET. J'ai un problème au niveau de l'implémentation d'une commande implémentant ICommand :

Code vb :
1
2
3
4
5
6
7
8
9
10
11
12
 
Public Delegate Sub EventHandler(ByVal sender As Object, ByVal e As System.EventArgs)
    Custom Event CanExecuteChanged As System.EventHandler Implements System.Windows.Input.ICommand.CanExecuteChanged
        AddHandler(ByVal value As System.EventHandler)
            CommandManager.RequerySuggested += value
        End AddHandler
        RemoveHandler(ByVal value As System.EventHandler)
            CommandManager.RequerySuggested -= value
        End RemoveHandler
        RaiseEvent()
        End RaiseEvent
    End Event
Avec l'erreur
Citation:
Use a RaiseEvent statement to Raise an event.
Ceci résulte de ma traduction du modèle original en C# :
Code c# :
1
2
3
4
5
6
 
public event EventHandler CanExecuteChanged
{
  add { CommandManager.RequerySuggested += value; }
  remove { CommandManager.RequerySuggested -= value; }
}

Mes questions sont donc comment bien implémenter cette fonction en VB.NET (car je doute vraiment de ma méthode). Et ensuite, l'utilité de cette méthode ? Si j'ai bien compris, elle est appellée lorsqu'il y a un changement qui affecte la commande ? Mais c'est assez imprécis.

Merci de vos réponses

Dernière modification par Robin56 ; 23/06/2009 à 14h15.
Robin56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2009, 17h04   #2
Rédacteur

 
Avatar de Thomas Lebrun
 
Inscription : octobre 2002
Messages : 9 165
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France

Informations forums :
Inscription : octobre 2002
Messages : 9 165
Points : 12 684
Points : 12 684
Citation:
Envoyé par Robin56 Voir le message
comment bien implémenter cette fonction en VB.NET (car je doute vraiment de ma méthode).
Utilise Reflector ou des outils de conversion de code

Citation:
Et ensuite, l'utilité de cette méthode ?
Ce n'est pas une méthode mais un évènement. En gros, à chaque fois que la source de la commande est modifiée, on s'abonne à l'évenement RequerySuggested
__________________
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development

WPF par la pratique, mon livre sur WPF ! (également disponible ici ou )

A la découverte de .NET
Thomas Lebrun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2009, 17h08   #3
Modérateur
 
Avatar de Robin56
 
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 1 153
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 153
Points : 2 488
Points : 2 488
Citation:
Envoyé par Thomas Lebrun Voir le message
Utilise Reflector ou des outils de conversion de code
Justement, je viens d'un outils de conversion de code qui souvent a un bon rendu. Mais pour ce point précis, le code qu'il me propose, Visual Studio me jette. Donc mon code vient justement d'un refactoring de code convertit.

Citation:
Envoyé par Thomas Lebrun Voir le message
Ce n'est pas une méthode mais un évènement. En gros, à chaque fois que la source de la commande est modifiée, on s'abonne à l'évenement RequerySuggested
Ok.
Robin56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2009, 14h15   #4
Modérateur
 
Avatar de Robin56
 
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 1 153
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 153
Points : 2 488
Points : 2 488
Pour revenir au problème :
Code vb :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Public Custom Event CanExecuteChanged As EventHandler
    AddHandler(ByVal value As EventHandler)
        If Me.canExecute IsNot Nothing Then
            CommandManager.RequerySuggested += value
        End If
    End AddHandler
    RemoveHandler(ByVal value As EventHandler)
        If Me.canExecute IsNot Nothing Then
            CommandManager.RequerySuggested -= value
        End If
    End RemoveHandler
End Event
Ceci ne fonctionne pas (résultant de la conversion C# > VB.NET).

Je voudrais savoir si quelqu'un aurait un échantillon de la méthode CanExecuteChanged en VB.NET.

Merci de vos conseils
Robin56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2009, 15h11   #5
Modérateur
 
Inscription : décembre 2004
Messages : 2 153
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 2 153
Points : 2 578
Points : 2 578
Salut,

Tu peux regarder dans la version vb (ici présente) d'un bon article sur le MVVM.

Extrait du code :
Code vb :
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
    Public Custom Event CanExecuteChanged As EventHandler Implements System.Windows.Input.ICommand.CanExecuteChanged
        AddHandler(ByVal value As EventHandler)
 
            If _objCanExecuteMethod IsNot Nothing Then
                AddHandler CommandManager.RequerySuggested, value
            End If
 
        End AddHandler
        '
        RemoveHandler(ByVal value As EventHandler)
 
            If _objCanExecuteMethod IsNot Nothing Then
                RemoveHandler CommandManager.RequerySuggested, value
            End If
 
        End RemoveHandler
        '
        RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
 
            If _objCanExecuteMethod IsNot Nothing Then
                CommandManager.InvalidateRequerySuggested()
            End If
 
        End RaiseEvent
    End Event

Je suis pas trop "vb", donc je n'en dirai pas davantage ^^ (on voit néanmoins quelques différences )
binoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2009, 16h00   #6
Modérateur
 
Avatar de Robin56
 
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 1 153
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 153
Points : 2 488
Points : 2 488
Merci pour ce lien, je vais regarder ça de ce pas

Citation:
Envoyé par binoo
Je suis pas trop "vb", donc je n'en dirai pas davantage ^^ (on voit néanmoins quelques différences )
J'avoue ne pas être trop "VB" non plus mais là je n'ai pas le choix de la techno. Venant du monde Java, je trouve aussi le C# plus agréable

... Ah cool ce bug tout bête qui me bloquait est résolu, merci (juste un problème de syntaxe donc comme je m'en doutais)

A très bientôt pour ma prochaine question
Robin56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 15h12.


 
 
 
 
Partenaires

Hébergement Web