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 :

Problème de Binding entre les UserControls


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    CHEF DE PROJET
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : CHEF DE PROJET

    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Problème de Binding entre les UserControls
    Bonjour,

    Avant de commencer j'explique la hiérarchie de mon projet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - ucMainView (DataContext = mainViewModel) x:Name="topLevel"
     
          - ucRibbonMenu (DataContext = mainViewModel.CommandShow) x:Name="myRibbonMenu"
     
          - ucToolBar (DataContext = mainViewModel ) x:Name="myToolBar"
     
          - ucTabControl (ItemSource= mainViewModel.maListObservableCollection)  x:Name="" et j'ai utilisé avec un DataTemple pour définir les relations
     
                   - ucTvaDetailView (DataContext = tvaDetailViewModel) x:Name=""
     
                   - ucTvaListView (dataContext = tvaListViewModel) x:Name=""
    pour afficher Un TabItem j'utilise mon menu est ça marche bien,

    j'ai ajouter un bouton dans ucTvaDetailView en clinquant sur ce dernier on doit ouvrir ou réouvrir ucTvaListViewon,

    dans mon code j'ai essayer de récupérer le DataContext de MainView ou bien du RibbonMenu afin de lancer la command, mais en fin de compte ça marche pas:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <StackPanel Grid.Row="0" Grid.Column="1" Margin="10,6,10,3" Width="Auto" Height="Auto" 
                        Orientation="Horizontal"
                        HorizontalAlignment="Left" VerticalAlignment="Center">
                    <TextBox Width="120" Text="{Binding Path=TVA}"/>
                    <Button Width="15" Height="22"
                        DataContext="{Binding Path=DataContext, ElementName=topLevel}"
                        Command="{Binding Path=CommandsShow.ShowTvaListCommand}">
                      <Image Stretch="Fill"
                          Source="/ITSProject.UIProjectV4;component/Images/TaskForAll/List.jpg" />
                    </Button>
     </StackPanel >

    comment je fais pour accéder à la command ShowTvaListCommand dans CommandShow ?

    sinon y a t'il une autre solution ?

    merci pour votre aide,

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Piste..
    Je peux te mettre sur un piste,j'utilise 'invoke' pour appeller une méthode de ma page contenant le UserControl à partir de celui-ci: exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.GetType().InvokeMember("NOM_DU_SUB_PUBLIC", System.Reflection.BindingFlags.InvokeMethod, Nothing, Me.Page, New Object() {PARAM_1, PARAm_2})

    Voilà

  3. #3
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Points : 172
    Points
    172
    Par défaut
    Normallement le nom topLevel n'est pas connu dans l'UserControl ou tu fais le binding donc c'est normal que tu ne peux pas accéder de cette façon.
    Dans des cas comme le tien il est plus correcte de définir une RoutedUICommand qui pourra être appelée n'importe ou dans ton interface. Ensuite tu fais un CommandBinding dans ton UserControl topLevel pour intercepter la commande. Et la tu pourra appeler la commande du VM.

  4. #4
    Membre à l'essai
    Profil pro
    CHEF DE PROJET
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : CHEF DE PROJET

    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    • oui c vrais goast le topLevel n'est pas connu, quand je parcour la liste de mes UserControl je le trouve pas, topLevel est connu comme un ElementName,
    • Pour la méthode de alienpowered invoke je l'ai pas testé, mais peut être j'y reviendrai par la suite,


    et en fin de compte çà marche, voici ce que je viens de faire tout à l'heur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Button Width="15" Height="22"
                 Command="{Binding Path=DataContext.CommandsShow.ShowTvaListCommand, 
                RelativeSource={RelativeSource FindAncestor, AncestorType=my:MainWindowView, AncestorLevel=1}}"
     >
                                            
       <Image Stretch="Fill"  Source="/ITSProject.UIProjectV4;component/Images/TaskForAll/List.jpg" />
    </Button>
    j'ai utilisé l'explorateur de propriétés de Visual Studio afin d'aller à DataContext du ucMainView, Dans la propriété Command:
    • Dans Source -> RelativeSource-> FindAncestor-> dans une liste j'ai choisi: ucMainView (avec AncestorLevel=1)
    • Dans Chemin d'accées -> j'ai choisi la propriété "DataContext" du "ucMainView" bien sur,
    • Dans le code source j'ai ajoutée le chemin de ma command Path=DataContext.CommandsShow.ShowTvaListCommand
    • et voilà ça marche très bien


    maintenant je vais m'orienter vers le passage paramètres et le retour d’appel ,avez vous un bon liens?

    merci à vous,

    Thanks

  5. #5
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Points : 172
    Points
    172
    Par défaut
    Pour les parametres c'est simple. Il suffit de spécifier la propriété CommandParameter du bouton. Le seul point subtil ici c'est que si tu passe une valeur numérique (ex: CommandParameter="100") ta commande va recevoir une chaine de caractères.
    Parcontre je ne vois pas ce que tu veux dire par "le retour d'appel" vu que les commandes ne renvoient pas de valeur?

  6. #6
    Membre à l'essai
    Profil pro
    CHEF DE PROJET
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : CHEF DE PROJET

    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    En fait j'ai une autre question:
    • est ce que je peu accéder aux commandes définis dans les modèles des TabItems (ex: ucTvaListView (dataContext = tvaListViewModel)) telque : NextCommand, previousCommand,..., pour parcourir les listes, ce là à partir de mon ucToolBar ?
    • sachant que les TabItems n'apparait qu'après leur ajout au TabControl


    J’essaie depuis tout à l'heur mais je n'arrive pas, j'ai pensé que les boutons de mon ToolBar doit récupérer les Commands aux démarrage de manière statique,

    sinon je vais chercher une autre solution,

    Merci d'avance,

Discussions similaires

  1. Spool, problème d'espace entre les colonnes
    Par moumoutte32 dans le forum SQL
    Réponses: 15
    Dernier message: 13/10/2011, 12h21
  2. [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
  3. [Conception]problème de relation entre les tables
    Par vaness76 dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/04/2007, 11h32
  4. Labyrinthe : problème de lien entres les cases
    Par spax dans le forum Prolog
    Réponses: 3
    Dernier message: 20/12/2006, 16h05
  5. [HTML & CSS] Problème d'espace entre les <li>
    Par Yoshidu62 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 17/05/2006, 18h53

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