Précédent   Forum des professionnels en informatique > Dotnet > Général Dotnet > 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
Nouveau membre du Club
 
Date d'inscription: juin 2009
Messages: 52
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 :
 
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# :
 
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
Vieux 22/06/2009, 17h04   #2
Rédacteur / Modérateur

 
Avatar de Thomas Lebrun
 
Date d'inscription: octobre 2002
Localisation: Région Parisienne
Âge: 27
Messages: 8 538
Par défaut

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
Vieux 22/06/2009, 17h08   #3
Nouveau membre du Club
 
Date d'inscription: juin 2009
Messages: 52
Par défaut

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
Vieux 23/06/2009, 14h15   #4
Nouveau membre du Club
 
Date d'inscription: juin 2009
Messages: 52
Par défaut

Pour revenir au problème :
Code vb :
 
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
Vieux 23/06/2009, 15h11   #5
Modérateur
 
Date d'inscription: décembre 2004
Messages: 1 250
Par défaut

Salut,

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

Extrait du code :
Code vb :
    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
Vieux 23/06/2009, 16h00   #6
Nouveau membre du Club
 
Date d'inscription: juin 2009
Messages: 52
Par défaut

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
NEWS MICROSOFT DOTNETFAQs .NETTUTORIELS .NETSOURCES .NETLIVRES .NETOUTILS .NETBLOG .NETDOTNET TV

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Dotnet > Général Dotnet > Windows Presentation Foundation



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 23h10.


Vos questions techniques : forum d'entraide Microsoft DotNET - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.