387 votes

Différence entre SelectedItem, SelectedValue et SelectedValuePath

Quelle est la différence entre la suivante:

Toutes ces propriétés de dépendance sont définis dans le Sélecteur de classe. J'ai souvent tendance à confondre SelectedItem avec SelectedValue , et SelectedValue avec SelectedValuePath.

Je voudrais savoir la différence entre eux, et aussi de le faire lorsque nous les utilisons, en particulier SelectedValue et SelectedValuePath. Veuillez expliquer leur utilisation avec des exemples simples.

597voto

Chris Anderson Points 3312

Leur nom peut être un peu déroutant :). Voici un résumé:

  • Le SelectedItem propriété renvoie la totalité de l'objet que votre liste est lié. Donc disons que vous avez lié une liste à une collection d' Category objets (à chaque Catégorie d'objet ayant les propriétés Name et ID). par exemple. ObservableCollection<Category>. L' SelectedItem de la propriété sera de retour, vous avez actuellement sélectionné Category objet. Pour la liaison à des fins cependant, ce n'est pas toujours ce que vous voulez, tant que cela ne permet de lier l'ensemble d'une Catégorie d'objet à la propriété que la liste est liée au, pas la valeur d'une propriété unique sur cette Catégorie d'objet (comme son ID de la propriété).

  • Par conséquent, nous avons le SelectedValuePath propriété et le SelectedValue bien comme un autre moyen de liaison (vous les utilisez en conjonction avec un autre). Disons que vous avez un Product objet, que votre point de vue est lié à (avec des propriétés pour des choses comme le Nom du produit, le Poids, etc). Disons aussi que vous avez un CategoryID de la propriété sur le Produit, objet, et vous voulez que l'utilisateur puisse sélectionner une catégorie pour le produit à partir d'une liste de catégories. Vous avez besoin de la propriété ID de la Catégorie de l'objet à être affectés à l' CategoryID de la propriété sur l'objet Produit. C'est là que l' SelectedValuePath et de la SelectedValue propriétés venir. Vous spécifiez que la propriété ID de la Catégorie de l'objet doit être affectée à la propriété sur le Produit objet de la liste est lié à l'utilisation d' SelectedValuePath='ID', puis lier l' SelectedValue de la propriété à la propriété sur le DataContext (ie. le Produit).

L'exemple ci-dessous illustre cela. Nous avons une zone de liste déroulante liée à une liste de Catégories (via ItemsSource). Nous sommes contraignant le code de catégorie de propriété sur le Produit de la valeur sélectionnée (à l'aide de la propriété SelectedValue). Nous sommes liés dans la Catégorie ID de la propriété par la SelectedValuePath de la propriété. Et nous disons seulement d'afficher le Nom de la propriété dans la zone de liste déroulante, avec la DisplayMemberPath de la propriété).

<ComboBox ItemsSource="{Binding Categories}" 
          SelectedValue="{Binding CategoryID, Mode=TwoWay}" 
          SelectedValuePath="ID" 
          DisplayMemberPath="Name" />

C'est un peu déroutant au départ, mais j'espère que cela rend un peu plus claire... :)

Chris

78voto

Dan J Points 10269

Pour répondre un peu plus sur le plan conceptuel:

SelectedValuePath définit la propriété (par son nom) des objets liés à la zone de liste de l' ItemsSource sera utilisé comme élément de l' SelectedValue.

Par exemple, si votre ListBox est lié à une collection d' Person objets, chacun de qui a Name, Age, et Gender propriétés, SelectedValuePath=Name sera la cause de la valeur de l'sélectionnée Persons' Name propriété d'être renvoyé en SelectedValue.

Notez que si vous remplacez la ListBox est ControlTemplate (ou appliquer un Style) qui spécifie quelle propriété doit afficher, SelectedValuePath ne peut pas être utilisé.

SelectedItem, quant à lui, retourne l'ensemble de la Person de l'objet actuellement sélectionné.

(Voici un exemple à partir de MSDN, à l'aide de l'Arborescence)

Mise à jour: @Joe l'a souligné, la DisplayMemberPath propriété n'est pas liée à l'Sélectionnés* propriétés. Sa bonne description suivante:

Notez que ces valeurs sont distinctes DisplayMemberPath (qui est défini sur ItemsControl, pas de Sélecteur), mais que la propriété a un comportement similaire à l' SelectedValuePath: en l'absence d'un style/modèle, il identifie les propriétés de l'objet lié à l'élément doit être utilisée comme une représentation de chaîne.

9voto

capdragon Points 5294

SelectedItem est object. SelectedValue et SelectedValuePath sont strings.

par exemple à l'aide de la zone de liste:

si vous dites me donnez listbox1.SelectedValue il sera de retour au texte de l'élément actuellement sélectionné.

string value = listbox1.SelectedValue;

si vous dites me donnez listbox1.SelectedItem il vous donnera l'ensemble de l'objet.

ListItem item = listbox1.SelectedItem;
string value = item.value;

1voto

kamalpreet Points 41

Chaque Contrôle qui utilise des Collections pour stocker les données ont SelectedValue, propriété SelectedItem. Exemple de ces contrôles de zone de liste, de liste Déroulante, RadioBuutonList, CheckBoxList.

Pour être plus précis, si vous avez littéralement veut récupérer le Texte de l'Élément Sélectionné, vous pouvez alors écrire-

ListBox1.SelectedItem.Text;

Votre ListBox1 pouvez également renvoyer le Texte à l'aide de propriété SelectedValue le forum a mis en valeur à l'avant. Mais ci-dessus est plus efficace pour obtenir le texte.

Maintenant, la valeur est quelque chose qui n'est pas visible pour l'utilisateur, mais il est principalement utilisé pour stocker dans la base de données. Nous n'avons pas d'insérer le Texte de la ListBox1, cependant, nous pouvons l'insérer aussi, mais nous avons utilisé pour insérer la valeur de l'élément sélectionné. Pour obtenir la valeur, nous pouvons utiliser

ListBox1.SelectedValue

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X