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

Silverlight Discussion :

Comment mettre la textBox d'un autoCompleteBox à ""


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut Comment mettre la textBox d'un autoCompleteBox à ""
    Bonjour,

    Dans une vue, j'ai l'autocompleteBox suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <sdk:AutoCompleteBox Height="25" Width="239" Name="acbAliment" ItemsSource="{Binding Aliments,Mode=TwoWay, UpdateSourceTrigger=Default}" ValueMemberBinding="{Binding AliDescription, Mode=TwoWay, UpdateSourceTrigger=Default}" SelectedItem="{Binding AcbSelectedItem, Mode=TwoWay, UpdateSourceTrigger=Default}" Margin="16,6,196,27">
                            <sdk:AutoCompleteBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding AliDescription,Mode=TwoWay, UpdateSourceTrigger=Default}" />
                                </DataTemplate>
                            </sdk:AutoCompleteBox.ItemTemplate>
                        </sdk:AutoCompleteBox>
    Le but est de taper une ou deux lettres, par exemple "an" et à ce moment l'autoComplete m'affiche la liste des aliments commençant par "an" et dans mon cas, j'ai "anchois" qui apparait dans ma liste, je clique sur "anchois" et dans le textbox apparait maintenant "anchois". Jusque là tout va bien.

    Ensuite, je clique un bouton qui me propose de mettre à jour cet aliment via l'ouverture d'une childWindow. Là je change le nom "anchois" par "anchoiszzz" et je sauve en base de données. Sur fermeture de ma ChildWindow je réinterroge ma base de donnée pour mettre à jour "Aliments" sur lequel est binder mon itemSource. Comme j'ai implémenté INotifyPropertyChanged, la source de mon autoCompleteBox est bien remise à jour.

    Le problème, c'est que dans le textBox de mon AutoCompleteBox, figure toujours le mot "anchois" alors que moi je voudrais qu'il soit remis à "".

    Je peux bien sûr, dans mon ViewModel mettre la propriété "AcbSelectedItem" à null, mais à ce moment "anchois" est remplacé par "an" (qui étaient les caractères que j'avais taper initialement dans mon AutoCompleteBox).

    Quelqu'un verrait-il un moyen de mettre le textbox à blanc ?


    Le

  2. #2
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Tu peux binder sur la propriété Text de l'AutoCompleteBox en mode TwoWay et la réinitialiser dans ton ViewModel.

    Quelques points à noter par rapport à ton code :
    - UpdateSourceTrigger=Default n'est pas nécessaire, c'est la valeur par défaut
    - Le mode TwoWay n'a de sens que si l'utilisateur peut interagir avec la propriété. Un SelectedItem sera effectivement modifié par l'utilisateur, mais un ItemsSource ou ValueMemberBinding ne le sera jamais, inutile de préciser le mode donc (par défaut c'est du OneWay).

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Merci pour cette réponse, malheureusement ça ne fonctionne pas car en fait après avoir fait l'update de mon "aliment", j'interroge à nouveau la Base de données et ce n'est plus mon élément que j'ai modifié qui est mon selectedItem.

    Pour résoudre le problème, avant d'ouvrir ma ChildWindow de modification, je prend l'index de l'item que je modifie et puis quand j'ai les résultats de ma DB, je replace le selectedItem de mon combo sur base de 'index préalablement sauvé.

    Il me met alors dans le textbox du combobox le nom "anchoiszzz" ce qui me convient.

    Merci aussi pour tes explications sur UpdateSourceTrigger et mode TwoWay, c'est tout à fait logique.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    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
    28
    29
    30
    31
    32
    33
    private void ClearAutocompleteBox()
            {
                TextBox textBox = FindVisualChild<TextBox>(autocompleteboxID);
     
                if (textBox != null)
                {
                    textBox.Text = string.Empty;
                }
            }
     
            public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                    if (child != null && child is T)
                    {
                        return (T)child;
                    }
                    else
                    {
                        T childOfChild = FindVisualChild<T>(child);
     
                        if (childOfChild != null)
                        {
                            return childOfChild;
                        }
                    }
                }
     
                return null;
            }

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

Discussions similaires

  1. [C#1.1] Comment mettre un textbox à la taille de la fenetre ?
    Par foolsky dans le forum Windows Mobile
    Réponses: 9
    Dernier message: 27/04/2006, 14h47
  2. Comment mettre le curseur d'un Memo sur le Canvas d'une Form ?
    Par julie20 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/08/2003, 13h24
  3. Réponses: 2
    Dernier message: 19/08/2003, 15h45
  4. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  5. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/05/2003, 17h34

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