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 :

Usercontrol RelayCommand Binding [MVVM]


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 37
    Points : 31
    Points
    31
    Par défaut Usercontrol RelayCommand Binding
    Bonsoir,

    Voilà, il se trouve que je suis confronter à un dilemmes , tout d'abord je tiens à préciser que j'utilise le mvvm light toolkit , voilà donc j'ai à ma disposition un usercontrol dans cet usercontrol je créé un bouton et je voudrais liée sont évènement "Click" a une méthode définis dans mon MainViewModel tout cela à l'aide de binding ^^.

    UserControl :

    Donc j'ai commencé par faire une DependencyProperty exposant la classe RelayCommand et binder mon bouton dessus :

    Bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Button Content="Connect" Command="{Binding ConnectionRelayCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
    DependencyProperty :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static readonly DependencyProperty ConnectionBindingProperty =  
        DependencyProperty.Register("ConnectionRelayCommand", typeof(RelayCommand), typeof(ConnectionControl), new UIPropertyMetadata(null));
     
    public RelayCommand ConnectionRelayCommand
    {
          get { return (RelayCommand)GetValue(ConnectionBindingProperty); }
          set { SetValue(ConnectionBindingProperty, value); }
    }
    MainViewModel:

    Créer une instance de RelayCommand dans mon MainViewModel :
    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
     
    public RelayCommand ButtonClick
    {
           get;
           set;
    }
     
    public void Test()
    {
           System.Windows.MessageBox.Show("test");
           ButtonClick.RaiseCanExecuteChanged();
    }
     
    public MainViewModel()
    {
            ButtonClick = new RelayCommand(Test);       
    }
    MainVue :

    Et enfin binder celle-ci a la propriété exposé de mon UserControl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <View:ConnectionControl x:Name="BookMaker1" Height="100" VerticalAlignment="Top" BookMaker="Book" ConnectionRelayCommand="{Binding ButtonClick}"/>
    Mais malheureusement ça ne marche pas .

    C'est ce pourquoi je sollicite votre aide, je vous remercie d'avance.

    Quentin.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Bizarre, à première vue ça devrait aller...

    Le Datacontext est bien mis ?

    Quand tu cliques sur le bouton, est-ce qu'il y a une erreur qui apparaît dans la fenêtre Output de Visual Studio ?
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Quand tu cliques sur le bouton, est-ce qu'il y a une erreur qui apparaît dans la fenêtre Output de Visual Studio ?

    Edit: Il y a effectivement une erreur que je n'avais pas vu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Data Error: 40 : BindingExpression path error: 'ButtonClick' property not found on 'object' ''ConnectionControlViewModel' (HashCode=61716980)'. BindingExpression:Path=ButtonClick; DataItem='ConnectionControlViewModel' (HashCode=61716980); target element is 'ConnectionControl' (Name='BookMaker1'); target property is 'ConnectionRelayCommand' (type 'RelayCommand')
    Visiblement si je comprend bien la propriété qui est définie dans mon MainViewModel et rechercher dans le view-model de l'UserControl ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RelativeSource={RelativeSource AncestorType={x:Type UserControl}}
    Le data context et bien définis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataContext="{Binding ConnectionControl, Source={StaticResource Locator}}"

  4. #4
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    C'est le ViewModel de ta MainVue qui semble être ConnectionControlViewModel au lieu de MainViewModel. C'est pour ça que le binding ne trouve pas la commande
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Effectivement j'ai donc enlever le datacontext de l'UserControl et cela fonctionne parfaitement

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

Discussions similaires

  1. [MVVM] RelayCommand Binding sur Button / disabled par défaut
    Par Thomsy92 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 24/02/2015, 10h04
  2. UserControl et Binding
    Par jacquesprogram dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 09/08/2011, 22h11
  3. [WPF] Probléme de binding dans un UserControl :(
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 17/07/2008, 15h51
  4. Binding entre deux UserControl
    Par mehdi_ouni dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 11/03/2008, 16h10
  5. [WPF] UserControl -> binding ??
    Par UNi[FR] dans le forum C#
    Réponses: 1
    Dernier message: 10/09/2007, 11h31

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