¿Cuál es la diferencia entre lo siguiente?
Todas estas propiedades de dependencia se definen en la clase Selector . A menudo confundo SelectedItem
con SelectedValue
y SelectedValue
con SelectedValuePath
.
Me gustaría saber la diferencia entre ellos, y también cuándo los usamos, especialmente SelectedValue
y SelectedValuePath
. Por favor explique su uso con algunos ejemplos simples.
Respuestas:
Sus nombres pueden ser un poco confusos :). Aquí hay un resumen:
La propiedad SelectedItem devuelve todo el objeto al que está vinculada su lista. Supongamos que ha vinculado una lista a una colección de
Category
objetos (cada objeto de Categoría tiene propiedades de Nombre e ID). p.ej.ObservableCollection<Category>
. LaSelectedItem
propiedad le devolverá elCategory
objeto seleccionado actualmente . Sin embargo, para fines vinculantes, esto no siempre es lo que desea, ya que esto solo le permite vincular un objeto Categoría completo a la propiedad a la que está vinculada la lista, no el valor de una sola propiedad en ese objeto Categoría (como suID
propiedad )Por lo tanto, tenemos la propiedad SelectedValuePath y la propiedad SelectedValue como un medio alternativo de vinculación (las usa conjuntamente). Supongamos que tiene un
Product
objeto al que está vinculada su vista (con propiedades para cosas como ProductName, Weight, etc.). Supongamos también que tiene unaCategoryID
propiedad en ese objeto Producto y desea que el usuario pueda seleccionar una categoría para el producto de una lista de categorías. Necesita que la propiedad ID del objeto Categoría se asigne a laCategoryID
propiedad en el objeto Producto. Aquí es donde elSelectedValuePath
y elSelectedValue
entran las propiedades. Usted especifica que la propiedad ID en el objeto Categoría debe asignarse a la propiedad en el objeto Producto que la lista está obligada a usarSelectedValuePath='ID'
, y luego vincula laSelectedValue
propiedad a la propiedad en el DataContext (es decir, el Producto).El siguiente ejemplo demuestra esto. Tenemos un ComboBox vinculado a una lista de Categorías (a través de ItemsSource). Vinculamos la propiedad CategoryID en el Producto como el valor seleccionado (usando la propiedad SelectedValue). Estamos relacionando esto con la propiedad de ID de la categoría a través de la propiedad SelectedValuePath. Y estamos diciendo que solo muestre la propiedad Name en ComboBox, con la propiedad DisplayMemberPath).
Al principio es un poco confuso, pero espero que esto lo haga un poco más claro ... :)
Chris
fuente
Para responder un poco más conceptualmente:
SelectedValuePath
define qué propiedad (por su nombre) de los objetos vinculados a ListBoxItemsSource
se utilizará como elementoSelectedValue
.Por ejemplo, si el cuadro de lista se une a una colección de
Person
objetos, cada uno de los cuales tieneName
,Age
yGender
propiedades,SelectedValuePath=Name
hará que el valor de los seleccionadosPerson
'sName
propiedad a ser devuelto enSelectedValue
.Tenga en cuenta que si anula la ControlTemplate de ListBox (o aplica un Estilo) que especifica qué propiedad debe mostrarse,
SelectedValuePath
no se puede utilizar.SelectedItem
, mientras tanto, devuelve todo elPerson
objeto actualmente seleccionado.(Aquí hay otro ejemplo de MSDN , usando TreeView)
Actualización: como señaló @Joe, la propiedad DisplayMemberPath no está relacionada con las propiedades Seleccionadas *. Su descripción apropiada sigue:
Tenga en cuenta que estos valores son distintos de
DisplayMemberPath
(que se define en ItemsControl, no Selector), pero esa propiedad tiene un comportamiento similar aSelectedValuePath
: en ausencia de un estilo / plantilla, identifica qué propiedad del objeto vinculado al elemento debe usarse como su Representación de cadena.fuente
SelectedItem
es unobject
.SelectedValue
ySelectedValuePath
sonstring
s.por ejemplo usando el ListBox:
si dices dame
listbox1.SelectedValue
, devolverá el texto del elemento seleccionado actualmente.si dices dame
listbox1.SelectedItem
, te dará el objeto completo.fuente
SelectedValue
también es unobject
y no unstring
. Porinspirado por esta pregunta, he escrito un blog junto con el fragmento de código aquí . A continuación se presentan algunos extractos del blog.
SelectedItem: el elemento seleccionado ayuda a vincular el valor real de DataSource que se mostrará. Este es de tipo objeto y podemos vincular cualquier tipo derivado del tipo de objeto con esta propiedad. Dado que usaremos el enlace MVVM para nuestros cuadros combinados en ese caso, esta es la propiedad que podemos usar para notificar a VM que el elemento ha sido seleccionado.
SelectedValue y SelectedValuePath: estas son las dos propiedades más confusas y mal interpretadas para el cuadro combinado. Pero estas propiedades vienen a rescatarnos cuando queremos vincular nuestro cuadro combinado con el valor del objeto ya creado. Consulte mi último escenario en la siguiente lista para tener una breve idea sobre las propiedades.
fuente
Cada control que usa Colecciones para almacenar datos tiene SelectedValue, SelectedItem propiedad. Ejemplos de estos controles son ListBox, Dropdown, RadioButtonList, CheckBoxList.
Para ser más específico si literalmente desea recuperar el texto del elemento seleccionado, puede escribir:
Su ListBox1 también puede devolver texto usando la propiedad SelectedValue si el valor se ha establecido anteriormente. Pero arriba es una forma más efectiva de obtener texto.
Ahora, el valor es algo que no es visible para el usuario, pero se usa principalmente para almacenar en la base de datos. No insertamos el texto de ListBox1, sin embargo, también podemos insertarlo, pero solíamos insertar el valor del elemento seleccionado. Para obtener valor podemos usar
Fuente
fuente