2009-11-24 49 views
2

Je travaille sur une application wpf, lorsque j'utilise Control Combo Box, je lui assigne ItemsSource. Ainsi, il affiche une liste d'éléments sans élément sélectionné, maintenant l'utilisateur peut sélectionner un élément de son choix. Lorsque l'utilisateur a fait une sélection, il n'a aucune option pour annuler cela. Je veux qu'il soit capable d'obtenir l'état initial où aucun élément n'est sélectionné. Comment puis je faire ça?Texte par défaut dans la liste déroulante

Répondre

1

Il y a plusieurs façons qui seraient également similaires dans la programmation de formulaires Windows. Vous pouvez effectuer l'une des opérations suivantes:

1) Ajoutez un enregistrement vide ou --None-- à la source de données de votre liste déroulante qui est l'enregistrement par défaut. 2) Vous pouvez surveiller l'événement de pression de touche et dire utiliser la touche ESC pour réinitialiser l'index sélectionné à -1.
3) Si votre combobox permet de taper, vous pouvez également leur permettre d'effacer le texte et de l'effacer si le champ de texte est vide, redéfinissez l'index selected à -1 pour qu'il ne soit pas réinitialisé à la valeur sélectionnée.

Alot du temps mes utilisateurs préfèrent l'option 1 mais c'est mes utilisateurs.

Cela devrait vous donner quelques options.

+0

j'ai utilisé la première façon plus tôt, mais dans ce cas, supposons que mon ComboBox a une liste de personnes type attribué its ItemsSource et définissez DisplayMemberPath sur la propriété Name du type People. alors j'ai besoin d'ajouter un objet people dans la liste avec Name = "No Select". N'y a-t-il pas moyen que je puisse avoir un objet nommé 'No Select' directement dans le ComboBox ainsi que mes autres objets People. – viky

+0

J'ai trouvé ce lien http://www.blueedge.nl/weblog/post/Nullable-ComboBox-in-Silverlight.aspx qui fait ce que vous demandez. Peut-être un peu trop mais il fait la même chose que le numéro 1 sans avoir à ajouter manuellement des enregistrements vierges. La solution semble fonctionner correctement. LOL, je pourrais même l'adapter à mes propres besoins. En dehors de cela, je suis d'accord avec beaucoup de gens sur le web, il n'y a pas grand-chose d'autre que d'ajouter un enregistrement fictif pour atteindre ce que vous cherchez. Donc, à part cela, je suggérerais l'une des solutions de surveillance de la pression des touches/du texte. –

1

Je voudrais réinitialiser à un enregistrement --None-- sur l'enregistrement vide par défaut (avec un index de -1) à chaque fois. Si vous manipulez des événements pour "sélection modifiée" ou quelque chose sur la ComboBox, vous risquez d'obtenir des erreurs de référence nul si vous pointez la case à -1, et c'est aussi simple que le seul changement que vous auriez à faire l'index sélectionné à (disons) 0 plutôt que -1.

myComboBox.SelectedIndex = 0; //where 0 is a given default content entry. 
1

D'une manière générale, je trouve que si je dois ajouter de la complexité à une application WPF, en ajoutant à la source de données est plus robuste que l'ajouter à la XAML.

Dans votre exemple, je corrigerais ceci dans ma source de données. Si j'ai:

public IEnumerable<Person> People { get {...} } 

dans ma source de données, j'ajouter ceci:

public IEnumerable<Person> PeopleWithNull 
{ 
    get 
    { 
     return (new List<Person> { null }).Concat(People); 
    } 
}