Quelle est la différence entre les éléments suivants:
Toutes ces propriétés de dépendance sont définies dans la classe Selector . Je confond souvent SelectedItem
avec SelectedValue
et SelectedValue
avec SelectedValuePath
.
Je voudrais connaître la différence entre eux, et aussi quand les utilisons-nous, en particulier SelectedValue
et SelectedValuePath
. Veuillez expliquer leur utilisation avec quelques exemples simples.
Réponses:
Leurs noms peuvent être un peu déroutants :). Voici un résumé:
La propriété SelectedItem renvoie l'objet entier auquel votre liste est liée. Supposons donc que vous ayez lié une liste à une collection d'
Category
objets (chaque objet Category ayant des propriétés Name et ID). par exemple.ObservableCollection<Category>
. LaSelectedItem
propriété vous renverra l'Category
objet actuellement sélectionné . À des fins de liaison, cependant, ce n'est pas toujours ce que vous voulez, car cela vous permet uniquement de lier un objet Category entier à la propriété à laquelle la liste est liée, pas la valeur d'une propriété unique sur cet objet Category (comme saID
propriété ).Par conséquent, nous avons la propriété SelectedValuePath et la propriété SelectedValue comme un autre moyen de liaison (vous les utilisez conjointement). Disons que vous avez un
Product
objet auquel votre vue est liée (avec des propriétés pour des choses comme ProductName, Weight, etc.). Supposons également que vous ayez uneCategoryID
propriété sur cet objet Product et que vous souhaitiez que l'utilisateur puisse sélectionner une catégorie pour le produit dans une liste de catégories. Vous devez affecter laCategoryID
propriété ID de l'objet Category à la propriété de l'objet Product. C'est là que leSelectedValuePath
et leSelectedValue
propriétés entre. Vous spécifiez que la propriété ID sur l'objet Category doit être affectée à la propriété sur l'objet Product que la liste est liée à utiliserSelectedValuePath='ID'
, puis liez leSelectedValue
propriété à la propriété sur le DataContext (c'est-à-dire le produit).L'exemple ci-dessous le démontre. Nous avons un ComboBox lié à une liste de catégories (via ItemsSource). Nous lions la propriété CategoryID sur le produit en tant que valeur sélectionnée (à l'aide de la propriété SelectedValue). Nous associons cela à la propriété ID de la catégorie via la propriété SelectedValuePath. Et nous disons seulement afficher la propriété Name dans le ComboBox, avec la propriété DisplayMemberPath).
C'est un peu déroutant au départ, mais j'espère que cela le rend un peu plus clair ... :)
Chris
la source
Pour répondre un peu plus conceptuellement:
SelectedValuePath
définit quelle propriété (par son nom) des objets liés au ListBoxItemsSource
sera utilisé comme élémentSelectedValue
.Par exemple, si votre ListBox est lié à une collection d'
Person
objets, dont chacun aName
,Age
et desGender
propriétés,SelectedValuePath=Name
provoquera la valeur de la sélectionnéePerson
de laName
propriété à retourner dansSelectedValue
.Notez que si vous remplacez le ControlTemplate de ListBox (ou appliquez un style) qui spécifie la propriété à afficher,
SelectedValuePath
ne peut pas être utilisé.SelectedItem
, quant à lui, renvoie l'intégralité de l'Person
objet actuellement sélectionné.(Voici un autre exemple de MSDN , utilisant TreeView)
Mise à jour: Comme l'a souligné @Joe, la propriété DisplayMemberPath n'est pas liée aux propriétés Selected *. Sa description appropriée suit:
Notez que ces valeurs sont distinctes de
DisplayMemberPath
(qui est définie sur ItemsControl, pas Selector), mais que la propriété a un comportement similaire àSelectedValuePath
: en l'absence d'un style / modèle, elle identifie la propriété de l'objet lié à l'élément qui doit être utilisée comme son représentation de chaîne.la source
SelectedItem
est unobject
.SelectedValue
etSelectedValuePath
sont l'string
art.par exemple en utilisant le ListBox:
si vous dites me donner,
listbox1.SelectedValue
il renverra le texte de l'élément actuellement sélectionné.si vous dites donnez-moi,
listbox1.SelectedItem
cela vous donnera tout l'objet.la source
SelectedValue
est aussi unobject
et non unstring
. Pls voir iciinspiré par cette question, j'ai écrit un blog avec l' extrait de code ici . Vous trouverez ci-dessous quelques extraits du blog
SelectedItem - L'élément sélectionné permet de lier la valeur réelle de la DataSource qui sera affichée. C'est de type objet et nous pouvons lier n'importe quel type dérivé de type d'objet avec cette propriété. Étant donné que nous utiliserons la liaison MVVM pour nos zones de liste déroulante dans ce cas, c'est la propriété que nous pouvons utiliser pour informer VM que l'élément a été sélectionné.
SelectedValue et SelectedValuePath - Ce sont les deux propriétés les plus déroutantes et mal interprétées pour la zone de liste déroulante. Mais ces propriétés viennent à notre secours lorsque nous voulons lier notre combobox avec la valeur d'un objet déjà créé. Veuillez vérifier mon dernier scénario dans la liste suivante pour avoir une brève idée des propriétés.
la source
Chaque contrôle qui utilise des collections pour stocker des données possède la propriété SelectedValue, SelectedItem. Des exemples de ces contrôles sont ListBox, Dropdown, RadioButtonList, CheckBoxList.
Pour être plus précis si vous voulez littéralement récupérer le texte de l'élément sélectionné, vous pouvez écrire:
Votre ListBox1 peut également renvoyer du texte en utilisant la propriété SelectedValue si la valeur a déjà été définie sur celle-ci. Mais ci-dessus est un moyen plus efficace d'obtenir du texte.
Maintenant, la valeur est quelque chose qui n'est pas visible pour l'utilisateur, mais elle est principalement utilisée pour stocker dans la base de données. Nous n'insérons pas le texte de ListBox1, mais nous pouvons également l'insérer, mais nous avons utilisé pour insérer la valeur de l'élément sélectionné. Pour obtenir de la valeur, nous pouvons utiliser
La source
la source