Question

Je sais que dans ASP.NET, je peux obtenir un élément d'une DropDownList en utilisant

DropDownList1.Items.FindByText

Existe-t-il une méthode similaire que je peux utiliser dans WPF pour une ComboBox ?

Voici le scénario.

J'ai une table appelée RestrictionFormat qui contient une colonne appelée RestrictionType, le type est une clé étrangère d'une table qui stocke ces valeurs.

Dans mon application d'édition que j'écris, lorsque l'utilisateur sélectionne le RestrictionFormat dans une ComboBox (cela fonctionne bien), j'extrait les détails pour les éditer.J'utilise un deuxième ComboBox pour m'assurer que l'utilisateur ne sélectionne qu'un seul RestrictionType lors de l'édition.J'ai déjà la deuxième propriété liée à la liste déroulante de la table RestrictionType, mais je dois modifier l'index sélectionné pour qu'il corresponde à la valeur spécifiée dans l'enregistrement.


Voici le scénario.

J'ai une table appelée RestrictionFormat qui contient une colonne appelée RestrictionType, le type est une clé étrangère d'une table qui stocke ces valeurs.

Dans mon application d'édition que j'écris, lorsque l'utilisateur sélectionne le RestrictionFormat dans une ComboBox (cela fonctionne bien), j'extrait les détails pour les éditer.J'utilise un deuxième ComboBox pour m'assurer que l'utilisateur ne sélectionne qu'un seul RestrictionType lors de l'édition.J'ai déjà la deuxième propriété liée à la liste déroulante de la table RestrictionType, mais je dois modifier l'index sélectionné pour qu'il corresponde à la valeur spécifiée dans l'enregistrement.

Est-ce que ça a du sens?

Était-ce utile?

La solution

Pouvez-vous utiliser ItemContainerGenerator ?

ItemContainerGenerator contient une méthode ContainerFromItem qui prend un paramètre d'objet.Si vous avez une référence à l'objet complet que contient votre comboBox (ou un moyen de le reconstruire), vous pouvez utiliser ce qui suit :

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

Autres conseils

Dans WPF, vous pouvez utiliser la méthode FindName.

XAML :

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

Fichier code-behind

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

Pour rechercher un élément par son contenu, vous pouvez utiliser Automatisation de l'interface utilisateur.

au lieu d'essayer de lier le SelectedIndex, pourquoi ne liez-vous pas simplement le SelectedItem dans le ComboBox à la valeur de l'enregistrement ?

en d'autres termes, définissez le DataContext du ComboBox (ou son parent) sur « l'enregistrement » sélectionné et liez le SelectedItem sur le ComboBox à une propriété exposée sur « l'enregistrement ».

il peut être utile de fournir des extraits de code ou des détails supplémentaires afin que les réponses puissent être plus spécifiques et faire référence aux variables et aux types que vous utilisez à la fois dans l'enregistrement source et dans la ComboBox que vous avez remplie.

Vous pouvez récupérer les éléments de la liste déroulante de deux manières :

Par article :

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

Par indice :

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

Pouvez-vous donner un peu de contexte sur ce que vous essayez de faire exactement ?

Quels objets mettez-vous dans votre Combobox, et en utilisant quelle méthode ?(Définissez ou liant la propriété ItemsSource?) Pourquoi avez-vous besoin de rechercher un élément par son "texte"?L'utilisation la plus habituelle dans WPF consiste à lier la propriété SelectedItem à autre chose afin que vous puissiez récupérer/définir l'entrée sélectionnée à l'aide de votre représentation.Existe-t-il une exigence spécifique pour laquelle vous devez rechercher un élément spécifique dans la liste ?

Dans le pire des cas, vous pouvez effectuer la recherche sur la collection à laquelle vous liez votre ComboBox à l'aide de Linq To Objects.

Ne confondez pas le ComboBoxItem (c'est-à-dire l'élément généré pour vous en arrière-plan par WPF lorsque vous liez ItemsSource) avec le SelectedItem, qui est l'objet réel de la collection à laquelle vous vous liez.C'est généralement la source de la plupart des problèmes avec WPF lorsque vous n'y êtes pas habitué.Il existe peu de cas où vous devez trouver le véritable ComboBoxItem.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top