What is the difference betweeen the following:
All these dependency properties are defined in Selector class. I often confuse SelectedItem with SelectedValue , and SelectedValue with SelectedValuePath.
I would like to know the difference between them, and also when do we use them, especially SelectedValue and SelectedValuePath. Please explain their use with some simple examples.
Their names can be a bit confusing :). Here's a summary:
The SelectedItem property returns the entire object that your list is bound to. So say you've bound a list to a collection of
Categoryobjects (with each Category object having Name and ID properties). eg.ObservableCollection<Category>. TheSelectedItemproperty will return you the currently selectedCategoryobject. For binding purposes however, this is not always what you want, as this only enables you to bind an entire Category object to the property that the list is bound to, not the value of a single property on that Category object (such as itsIDproperty).Therefore we have the SelectedValuePath property and the SelectedValue property as an alternative means of binding (you use them in conjunction with one another). Let's say you have a
Productobject, that your view is bound to (with properties for things like ProductName, Weight, etc). Let's also say you have aCategoryIDproperty on that Product object, and you want the user to be able to select a category for the product from a list of categories. You need the ID property of the Category object to be assigned to theCategoryIDproperty on the Product object. This is where theSelectedValuePathand theSelectedValueproperties come in. You specify that the ID property on the Category object should be assigned to the property on the Product object that the list is bound to usingSelectedValuePath='ID', and then bind theSelectedValueproperty to the property on the DataContext (ie. the Product).The example below demonstrates this. We have a ComboBox bound to a list of Categories (via ItemsSource). We're binding the CategoryID property on the Product as the selected value (using the SelectedValue property). We're relating this to the Category's ID property via the SelectedValuePath property. And we're saying only display the Name property in the ComboBox, with the DisplayMemberPath property).
It's a little confusing initially, but hopefully this makes it a bit clearer... :)
Chris