Apa perbedaan antara berikut ini:
Semua properti ketergantungan ini didefinisikan di kelas Pemilih . Saya sering bingung SelectedItem
dengan SelectedValue
, dan SelectedValue
dengan SelectedValuePath
.
Saya ingin tahu perbedaan di antara mereka, dan kapan kami menggunakannya, terutama SelectedValue
dan SelectedValuePath
. Tolong jelaskan penggunaannya dengan beberapa contoh sederhana.
Jawaban:
Nama mereka bisa sedikit membingungkan :). Berikut ringkasannya:
The SelectedItem properti mengembalikan seluruh objek yang daftar Anda terikat untuk. Jadi katakanlah Anda telah mengikat daftar ke kumpulan
Category
objek (dengan setiap objek Kategori memiliki properti Nama dan ID). misalnya.ObservableCollection<Category>
. TheSelectedItem
properti akan kembali Anda sedang dipilihCategory
objek. Namun untuk tujuan yang mengikat, ini tidak selalu seperti yang Anda inginkan, karena ini hanya memungkinkan Anda untuk mengikat seluruh objek Kategori ke properti yang terikat daftar, bukan nilai properti tunggal pada objek Kategori tersebut (sepertiID
propertinya ).Oleh karena itu kami memiliki properti SelectedValuePath dan properti SelectedValue sebagai cara alternatif untuk mengikat (Anda menggunakannya bersama satu sama lain). Katakanlah Anda memiliki
Product
objek, yang terikat dengan pandangan Anda (dengan properti untuk hal-hal seperti ProductName, Weight, dll). Katakan juga Anda memilikiCategoryID
properti pada objek Produk itu, dan Anda ingin pengguna dapat memilih kategori untuk produk dari daftar kategori. Anda memerlukan properti ID objek Kategori untuk ditugaskan keCategoryID
properti pada objek Produk. Di sinilah tempatSelectedValuePath
danSelectedValue
properti masuk. Anda menentukan bahwa properti ID pada objek Kategori harus ditugaskan ke properti pada objek Produk yang terikat daftar untuk menggunakanSelectedValuePath='ID'
, dan kemudian mengikatSelectedValue
properti ke properti pada DataContext (mis. Produk).Contoh di bawah ini menunjukkan ini. Kami memiliki ComboBox terikat ke daftar Kategori (melalui ItemsSource). Kami mengikat properti CategoryID pada Produk sebagai nilai yang dipilih (menggunakan properti SelectedValue). Kami menghubungkan ini dengan properti ID Kategori melalui properti SelectedValuePath. Dan kami katakan hanya tampilkan properti Name di ComboBox, dengan properti DisplayMemberPath).
Awalnya agak membingungkan, tapi semoga ini membuatnya sedikit lebih jelas ... :)
Chris
sumber
Untuk menjawab sedikit lebih konseptual:
SelectedValuePath
mendefinisikan properti mana (dengan namanya) dari objek yang terikat pada ListBoxItemsSource
akan digunakan sebagai itemSelectedValue
.Misalnya, jika ListBox Anda terikat untuk koleksi
Person
benda-benda, masing-masing memilikiName
,Age
, danGender
properti,SelectedValuePath=Name
akan menyebabkan nilai yang dipilihPerson
'sName
properti akan dikembalikanSelectedValue
.Perhatikan bahwa jika Anda mengganti ControlTemplate ListBox (atau menerapkan Style) yang menentukan properti apa yang harus ditampilkan,
SelectedValuePath
tidak dapat digunakan.SelectedItem
, sementara itu, mengembalikan seluruhPerson
objek yang saat ini dipilih.(Berikut contoh lebih lanjut dari MSDN , menggunakan TreeView)
Pembaruan: Seperti yang ditunjukkan @ Jo, properti DisplayMemberPath tidak terkait dengan properti * yang Dipilih. Deskripsi yang tepat berikut:
Perhatikan bahwa nilai-nilai ini berbeda dari
DisplayMemberPath
(yang didefinisikan pada ItemsControl, bukan Selector), tetapi properti itu memiliki perilaku yang mirip denganSelectedValuePath
: dengan tidak adanya gaya / templat, ini mengidentifikasi properti objek yang terikat pada item yang harus digunakan sebagai properti representasi string.sumber
SelectedItem
adalah sebuahobject
.SelectedValue
danSelectedValuePath
yangstring
s.misalnya menggunakan ListBox:
jika Anda mengatakan beri saya
listbox1.SelectedValue
itu akan mengembalikan teks dari item yang dipilih saat ini.jika Anda mengatakan memberi saya
listbox1.SelectedItem
itu akan memberi Anda seluruh objek.sumber
SelectedValue
juga merupakanobject
dan bukanstring
.terinspirasi oleh pertanyaan ini saya telah menulis sebuah blog bersama dengan potongan kode di sini . Di bawah ini adalah beberapa kutipan dari blog
SelectedItem - Item yang Dipilih membantu untuk mengikat nilai aktual dari DataSource yang akan ditampilkan. Ini adalah tipe objek dan kita dapat mengikat semua tipe yang berasal dari tipe objek dengan properti ini. Karena kami akan menggunakan MVVM yang mengikat untuk kotak kombo kami dalam hal ini, ini adalah properti yang dapat kami gunakan untuk memberi tahu VM bahwa item telah dipilih.
SelectedValue dan SelectedValuePath - Ini adalah dua properti yang paling membingungkan dan salah tafsir untuk combobox. Tetapi properti ini datang untuk menyelamatkan ketika kita ingin mengikat kotak kombo kita dengan nilai dari objek yang sudah dibuat. Silakan periksa skenario terakhir saya di daftar berikut untuk mendapatkan ide singkat tentang properti.
sumber
Setiap kontrol yang menggunakan Koleksi untuk menyimpan data memiliki properti SelectedValue, SelectedItem. Contoh kontrol ini adalah ListBox, Dropdown, RadioButtonList, CheckBoxList.
Untuk lebih spesifik jika Anda benar-benar ingin mengambil Teks dari Item yang Dipilih maka Anda dapat menulis:
ListBox1 Anda juga dapat mengembalikan Teks menggunakan properti SelectedValue jika nilainya telah disetel sebelumnya. Tetapi cara di atas lebih efektif untuk mendapatkan teks.
Sekarang, nilainya adalah sesuatu yang tidak terlihat oleh pengguna tetapi sebagian besar digunakan untuk menyimpan dalam database. Kami tidak memasukkan Teks ListBox1, namun kami juga bisa menyisipkannya, tetapi kami biasa memasukkan nilai item yang dipilih. Untuk mendapatkan nilai bisa kita gunakan
Sumber
sumber