WPF composant ComboBox Modifiable
J'ai un ComboBox et de la zone de liste déroulante.IsEditable propriété est définie sur True pour avoir une zone de liste déroulante agir à la fois comme une zone de texte et une liste déroulante simultanément. Mais lorsque la zone de liste déroulante est liée à des données, la saisie de texte personnalisé ne sera pas provoquer un nouvel élément à ajouter à la liaison de données de la collection.
Par exemple, si j'entre "Jean" dans une liste déroulante qui est lié à une liste de personnes, qui ne contient pas la valeur 'Joe', la valeur 'Joe' ne va pas être ajouté à la liste déroulante automatiquement.
Quelle est la meilleure façon de gérer cela?
Vous devez vous connecter pour publier un commentaire.
Voici une base
MVVM
conformes à la façon d'obtenir le comportement que vous voulez:MainWindow.xaml
MainWindow.cs
J'ai eu à la place une autre commande dans la fenêtre que j'ai mis de l'
UpdateSourceTrigger
propriété de laText
de liaison àLostFocus
. Si il n'y a pas d'autres contrôles dans la fenêtre, puis laCombobox
ne sera jamais perdre le focus.J'ai changé le mode de mise à jour, car par défaut le mode de mise à jour est
Propertychanged
qui va ajouter un nouvel élément pour chaque frappe.E. G. si vous avez entré le texte "Fenêtre", les éléments suivants devraient être ajoutés à votre collection:
Je voudrais y faire face dans l'événement LostFocus.
Ici, vous pouvez vérifier si le SelectedItem est null. Si oui, ajoutez la valeur de Texte à la limite de la liste et définir SelectedItem pour le nouvel élément.
En XAML:
Dans le code-behind:
Espère que cela aide 🙂
Ma suggestion serait d'utiliser un MVVM-approche et de lier votre zone de liste déroulante.Texte à certains TextProperty de votre ViewModel. (Même effet peut être obtenu en ajoutant simplement une propriété de type chaîne de votre point de vue)
Ensuite, vous pouvez traiter l'entrée dans le setter de cette propriété et d'ajouter un nouvel élément à la liste, peu importe la façon dont il a été "engagé" dans la vue.
Autant que je sache, il n'y a pas de dehors-de-le-boîte de mécanisme pour ajouter de nouveaux éléments à votre source de données, vous aurez à faire le point de la génération vous-même de toute façon.
Alternativement, vous pouvez lier les deux - SelectedItem et le Texte de votre zone de liste déroulante - pour éviter des recherches dans le cas où l'utilisateur a entré un article. Mais cette partie peut être moins important pour répondre à votre question.