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

Windows Presentation Foundation Discussion :

[MVVM] Utilisation des InputBindings


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 [MVVM] Utilisation des InputBindings
    Salut,

    Comme vous l'avez peut-être remarqué, la propriété Command d'un InputBinding n'est pas une DependencyProperty, si bien qu'on ne peut pas binder un InputGesture sur une commande du ViewModel. J'ai pas mal cherché comment on pouvait contourner cette limitation, par exemple en héritant de InputBinding ou en passant par une propriété attachée, mais en fait ça ne règle pas le problème, car les InputBindings déclarés dans le XAML n'héritent pas du DataContext

    J'ai trouvé quelques ressources intéressantes sur le sujet :
    http://social.msdn.microsoft.com/For...-1959cf36a8f7/ => la solution proposée est vraiment trop complexe à mettre en oeuvre...
    http://stackoverflow.com/questions/6...vm-application => idem
    http://groups.google.com/group/wpf-d...a4990bea96340f => Discussion très intéressante avec plusieurs gourous de WPF (Josh Smith, John Grossman...), mais au final aucune solution concrète

    Il me semble que ça ne devrait pas être très compliqué à faire, et pourtant, j'ai beau chercher, je ne trouve aucune solution simple

    Comment gérez-vous les raccourcis clavier ou souris en MVVM ? Y a-t-il une solution simple qui m'a échappé ?

    Merci d'avance !

  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
    Citation Envoyé par tomlev Voir le message
    Comment gérez-vous les raccourcis clavier ou souris en MVVM ? Y a-t-il une solution simple qui m'a échappé ?
    Je n'ai jamasi eu l'occasion de mettre en place les raccourcis clavier avec MVVM mais je vois effectivement le problème sans avoir de solution viable

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    J'ai également moi aussi rencontré le problème (la propriété Command n'est pas un DP)... Pour l'instant je m'en suis sorti en utilisant ponctuellement le code-behind, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.searchTextBox.InputBindings.Add(new KeyBinding(
      this.searchViewModel.SearchCommand,
      new KeyGesture(Key.Enter)));
    J'avoue que je ne suis pas du tout satisfait du résultat... Peut être que Command deviendra une DP dans .Net 4 :p

  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
    Merci pour vos réponses

    Citation Envoyé par Jérem22 Voir le message
    J'ai également moi aussi rencontré le problème (la propriété Command n'est pas un DP)... Pour l'instant je m'en suis sorti en utilisant ponctuellement le code-behind, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.searchTextBox.InputBindings.Add(new KeyBinding(
      this.searchViewModel.SearchCommand,
      new KeyGesture(Key.Enter)));
    Effectivement ce serait une solution... mais je préfèrerais éviter de passer par le code-behind, et surtout de référencer explicitement le ViewModel dans la View...

    Citation Envoyé par Jérem22 Voir le message
    Peut être que Command deviendra une DP dans .Net 4 :p
    Ce serait un bon début, mais pas suffisant malheureusement... D'après ce que j'ai pu lire, les InputBindings ne font pas partie du visual tree ni du logical tree, et n'héritent pas du DataContext (ce qui explique le problème décrit dans le 3e post du premier lien que j'ai donné). J'ai l'impression qu'il y a comme un problème de conception dans WPF à ce niveau là . Dommage...

    Si jamais je trouve une solution viable, je vous tiendrai au courant

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    Tu pourrais peut être regarder du côté d'Onyx (http://wpfonyx.codeplex.com/) qui est un framework pour utiliser MVVM.

    Peut être que le créateur du projet a prévu quelque chose de ce côté là (j'ai pas eus le temps d'essayer...).

  6. #6
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Effectivement ce serait une solution... mais je préfèrerais éviter de passer par le code-behind, et surtout de référencer explicitement le ViewModel dans la View...
    Pourquoi ? Tu as de toute façon forcément une référence sur le ViewModel étant donné que tu te bind dessus ?
    Et puis tu ne fais qu'écrire en C # se qui aurait dû l'être en XAML mais tout en restant dans la même classe (la vue). Est-ce vraiment casser la pattern que d'écrire du code pour suppléer le XAML si ce n'est pas possible de faire autrement?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  7. #7
    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
    Citation Envoyé par The_badger_man Voir le message
    Pourquoi ? Tu as de toute façon forcément une référence sur le ViewModel étant donné que tu te bind dessus ?
    Oui, mais normalement la vue n'a pas besoin de connaitre explicitement le type du ViewModel. On l'affecte simplement au DataContext, et le binding récupère dynamiquement les propriétés et commandes. En principe, on devrait pouvoir remplacer le ViewModel sans changer quoi que ce soit à la vue...

    Citation Envoyé par The_badger_man Voir le message
    Et puis tu ne fais qu'écrire en C # se qui aurait dû l'être en XAML mais tout en restant dans la même classe (la vue). Est-ce vraiment casser la pattern que d'écrire du code pour suppléer le XAML si ce n'est pas possible de faire autrement?
    Ce qui me gène, ce n'est pas tant d'écrire du code behind, mais de mettre une dépendance en dur sur le ViewModel. Enfin, de toutes façons j'ai l'impression qu'il n'y a pas trop le choix . Donc en attendant mieux c'est ce que je vais faire

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

Discussions similaires

  1. [MVVM] Utiliser un valueconverter pour binder une énum à des radiobuttons
    Par zoaax dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 25/11/2011, 17h01
  2. Exemple d'utilisation des ApplicationCommands avec MVVM
    Par Krustig dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 31/03/2011, 14h04
  3. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24
  4. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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