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 :

Echange entre deux controls


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut Echange entre deux controls
    Bonjour à tous,
    J'ai implémenté une interface avec MVVM light qui fonctionne bien, mais je me retrouve dans un cas de figure compliqué.

    C'est un formulaire qui exploite un objet "Projet".
    Le Contexte :
    - Mon "projet" peut avoir des "intervenants" => Géré dans un ViewModelPro.
    - Un intervenant est composé d'un "type d'intervenant" et d'un "contact" => Géré dans un ViewModelInt.

    La Forme :
    - Dans mon formulaire, J'ai une ListView pour afficher mes "intervenants" liés.
    - Un item de la liste est composé d'une ComboBox (type d'intervenant) et d'un AutoCompleteBox (Contact).

    Les Questions :
    - Comment faire communiquer les 2 composants (ComboBox et AutoCompleteBox) pour que :
    1. L'AutoCompleteBox se charge avec comme filtre l'élément choisit dans la ComboBox ?
    2. Lorsque la ComboBox fait un SelectionChanged, l'AutoCompleteBox se remette à null ?

    Aujourd'hui, j'ai ça :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
        <Resources>
            <DataTemplate x:Key="lvTemplateInt">
                <Border>
                    <WrapPanel>
                        <ComboBox x:Name="cbTypesInt" ItemsSource="{Binding Interv.ElmtsTypes.items, Source={StaticResource Locator}}"
                            SelectedValue="{Binding typeInt, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Mode=TwoWay}">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="SelectionChanged" >
                                    ??? Quoi mettre pour réinitialiser acInterv ???
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </ComboBox>
                        <Toolkit:AutoCompleteBox x:Name="acInterv" SelectedItem="{Binding contact, Mode=TwoWay}" Populating="acInterv_Populating">
                            <Toolkit:AutoCompleteBox.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <Label Content="{Binding .}" />
                                    </StackPanel>
                                </DataTemplate>
                            </Toolkit:AutoCompleteBox.ItemTemplate>
                        </Toolkit:AutoCompleteBox>
                    </WrapPanel>
                </Border>
            </DataTemplate>
        </Resources>
    ...
                    <ListView x:Name="lvInterv" ItemsSource="{Binding ElmtInfo.intervenants}" ItemTemplate="{StaticResource lvTemplateInt}"/>
    Et mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private void acInterv_Populating(object sender, PopulatingEventArgs e) {
                AutoCompleteBox acb = sender as AutoCompleteBox;
                if ((acb != null) && (!string.IsNullOrEmpty(e.Parameter)) && (e.Parameter.Length > 3)) {
                    var vmInts = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<ViewModelIntervs>();
                    var IntervTypeIdSel = ???// Essai de récupérer le type choisit dans la ComboBox
                    vmInts.GetAllCommand.Execute(IntervTypeIdSel);
                    if (vmInts.Elmts?.items?.Count > 0) {
                        acb.ItemsSource = vmInts.Elmts?.items;
                        acb.PopulateComplete();
                    }
                }
            }
    Avez vous une idée ?

  2. #2
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    J'ai réussi à répondre aux deux questions par une seule technique:
    http://www.codeproject.com/Tips/4017...PF-Silverlight

    Mais par contre, pour la deuxième, c'est plus du bricolage. Je ne suis pas amoureux car C'est du combobox que tout part.
    J'aurais trouvé plus logique que ce soit l'AutoComplete qui aille chercher la valeur du Combobox plutôt qu'elle lui renseigne via son TAG lors du déclenchement de son trigger.
    Car dans ce cas, si j'avais 2 critères (2 Combobox de filtre, admettons), je serait emm**dé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public class ActionCbb2AcbSetNull : TargetedTriggerAction<AutoCompleteBox> {
            /// <summary>Execution</summary>
            protected override void Invoke(object parameter) {
                if (((ComboBox)AssociatedObject).SelectedIndex >= 0) {
                    Target.Tag = ((ComboBox)AssociatedObject).SelectedItem;
                } else {
                    Target.Tag = null;
                }
                Target.SelectedItem = null;
            }
        }
    Est ce que quelqu'un à une meilleur piste ?

Discussions similaires

  1. Echange entre deux nombres et pointeurs
    Par benjamin_malaussene dans le forum Débuter
    Réponses: 1
    Dernier message: 03/03/2015, 11h10
  2. Réponses: 2
    Dernier message: 16/08/2014, 21h38
  3. [Affichage] Etablir une distance entre deux controls forms
    Par alavoler dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/05/2008, 11h38
  4. Communication entre deux controllers
    Par Feustine dans le forum Ruby on Rails
    Réponses: 10
    Dernier message: 17/12/2007, 09h58
  5. [VB.NET] Passer une valeur de control entre deux form
    Par TheMacleod dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/12/2005, 11h07

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