Какая разница между следующим:
Все эти свойства зависимостей определены в классе Selector . Я часто путаю SelectedItem
с SelectedValue
и SelectedValue
с SelectedValuePath
.
Я хотел бы знать разницу между ними, а также когда мы их используем, особенно SelectedValue
и SelectedValuePath
. Пожалуйста, объясните их использование с несколькими простыми примерами.
Ответы:
Их имена могут быть немного запутанными :). Вот резюме:
Свойство SelectedItem возвращает весь объект, с которым связан ваш список. Допустим, вы связали список с коллекцией
Category
объектов (каждый объект Category имеет свойства Name и ID). например.ObservableCollection<Category>
,SelectedItem
Свойство вернет вам текущий выбранныйCategory
объект. Однако для целей связывания это не всегда то, что вам нужно, поскольку это позволяет вам связать весь объект Category со свойством, с которым связан список, а не со значением одного свойства в этом объекте Category (например, егоID
свойство). ).Поэтому у нас есть свойство SelectedValuePath и свойство SelectedValue в качестве альтернативного средства привязки (вы используете их вместе друг с другом). Допустим, у вас есть
Product
объект, с которым связано ваше представление (со свойствами для таких вещей, как ProductName, Weight и т. Д.). Предположим также, что у вас естьCategoryID
свойство для этого объекта Product, и вы хотите, чтобы пользователь мог выбрать категорию для продукта из списка категорий. Необходимо, чтобы свойство ID объекта Category было присвоеноCategoryID
свойству объекта Product. Это гдеSelectedValuePath
иSelectedValue
свойства вступают в силу. Вы указываете, что свойство ID объекта Category должно быть присвоено свойству объекта Product, с которым связан списокSelectedValuePath='ID'
, а затем привязываетеSelectedValue
свойство к свойству DataContext (т. е. Product).Пример ниже демонстрирует это. У нас есть ComboBox, связанный со списком категорий (через ItemsSource). Мы привязываем свойство CategoryID к Продукту как выбранное значение (используя свойство SelectedValue). Мы связываем это со свойством ID категории через свойство SelectedValuePath. И мы говорим только отображать свойство Name в ComboBox, со свойством DisplayMemberPath).
Поначалу это немного смущает, но, надеюсь, это немного проясняет ... :)
Крис
источник
Чтобы ответить немного более концептуально:
SelectedValuePath
определяет, какое свойство (по его имени) объектов, связанных с ListBox,ItemsSource
будет использоваться в качестве элементаSelectedValue
.Например, если ваш ListBox привязан к коллекции
Person
объектов, каждый из которых имеетName
,Age
иGender
свойства,SelectedValuePath=Name
вызывает значение выбранногоPerson
«sName
имущества , которое будет возвращено вSelectedValue
.Обратите внимание, что если вы переопределите элемент управления ListBox ControlTemplate (или примените стиль), который указывает, какое свойство должно отображаться,
SelectedValuePath
использовать нельзя.SelectedItem
Между тем, возвращает весьPerson
выбранный объект.(Вот еще один пример из MSDN с использованием TreeView)
Обновление: как указал @Joe, свойство DisplayMemberPath не связано со свойствами Selected *. Его правильное описание следующее:
Обратите внимание, что эти значения отличаются от
DisplayMemberPath
(которые определены в ItemsControl, а не в Selector), но это свойство имеет сходное поведениеSelectedValuePath
: в отсутствие стиля / шаблона оно определяет, какое свойство объекта, связанного с элементом, следует использовать в качестве его строковое представление.источник
SelectedItem
являетсяobject
.SelectedValue
а такжеSelectedValuePath
являютсяstring
s.например, используя ListBox:
если вы скажете «дай мне»,
listbox1.SelectedValue
он вернет текст текущего выбранного элемента.если ты скажешь, дай мне,
listbox1.SelectedItem
это даст тебе весь объект.источник
SelectedValue
это такжеobject
и неstring
. Пожалуйста, смотрите здесьвдохновленный этим вопросом, я написал блог вместе с фрагментом кода здесь . Ниже приведены некоторые выдержки из блога.
SelectedItem - Выбранный элемент помогает связать фактическое значение из источника данных, который будет отображаться. Это объект типа, и мы можем связать с этим свойством любой тип, полученный из типа объекта. Поскольку в этом случае мы будем использовать привязку MVVM для наших полей со списком, это свойство, которое мы можем использовать, чтобы уведомить ВМ о том, что элемент выбран.
SelectedValue и SelectedValuePath - это два наиболее запутанных и неверно истолкованных свойства для выпадающего списка. Но эти свойства приходят на помощь, когда мы хотим связать наш комбинированный список со значением из уже созданного объекта. Пожалуйста, проверьте мой последний сценарий в следующем списке, чтобы получить краткое представление о свойствах.
источник
Каждый элемент управления, который использует Коллекции для хранения данных, имеет свойство SelectedValue, SelectedItem. Примерами этих элементов управления являются ListBox, Dropdown, RadioButtonList, CheckBoxList.
Если быть более точным, если вы в буквальном смысле хотите получить текст выбранного элемента, вы можете написать:
Ваш ListBox1 также может возвращать текст, используя свойство SelectedValue, если значение было установлено в это ранее. Но выше, это более эффективный способ получить текст.
Теперь это значение невидимо для пользователя, но используется в основном для хранения в базе данных. Мы не вставляем текст ListBox1, однако мы можем также вставить его, но мы использовали для вставки значения выбранного элемента. Чтобы получить значение мы можем использовать
Источник
источник