Estás vinculando demasiado; solo necesita configurar SelectedValue
y SelectedValuePath
, o SelectedItem
. En este caso, parece que en realidad estás tratando de vincular a un objeto específico. Si usted está tratando de tener la ComboBox
establecer la propiedad Category
en su Book
y la corriente Book
objeto en realidad tiene una referencia a una instancia de Category
que está en categoryList
, entonces usted debe utilizar el SelectedItem
vinculante y eliminar los enlaces para SelectedValue
y SelectedValuePath
.
Editar
Para ampliar un poco sobre cómo se hace esto, SelectedValue
está diseñado para ser utilizado cuando se tiene una pieza común de información para vincular su artículo enlazado con una propiedad en el origen de la lista. Por ejemplo, digamos que tengo una clase Book
con una propiedad CategoryID
.
public class Book
{
public string CategoryID { get; set; }
public string Title { get; set; }
}
public class CategoryID
{
public string ID { get; set; }
public string Name { get; set; }
}
En este caso, se debe hacer:
<ComboBox SelectedValue = "{Binding CategoryID}"
SelectedValuePath = "ID"
DisplayMemberPath = "Name" />
SelectedItem
, por el contrario, es para cuando la instancia de cota tiene una referencia real a (o, más precisamente, un objeto que es equivalente a) un elemento en la lista encuadernada. Por lo tanto, vamos a suponer que la clase Book
realmente se ve así:
public class Book
{
public Category Category { get; set; }
public string Title { get; set; }
}
En este caso, se debe hacer:
<ComboBox SelectedItem = "{Binding Category}"
DisplayMemberPath = "Name" />
Pero es muy importante tener en cuenta que esto no funcionará a menos que la clase Book
tiene una referencia a la misma instancia de Category
que la que tiene en la lista. Si las referencias son diferentes (incluso si los valores en las clases son iguales), entonces esto no funcionará, ya que el ComboBox
no podrá encontrar el Category
al que se hace referencia en el Book
en la lista.
El problema real con la forma en que lo estaba enlazando (vinculando a Category.ID
) es que está mezclando los esquemas. Usted tiene una referencia, pero está tratando de enlazar la clave en su lugar. Todo lo que hará es intentar establecer el valor en su referencia, , no intentará cambiar la referencia en su clase.
Lo sentimos sí, sólo un poco de lo tiró todo por ahí. :) SelectedValue + SelectedValuePath no funciona. Tampoco lo hace SelectedItem. O incluso el SelectedItem + SelectedValuePath como Doug muestra a continuación. Ergh. Creo que las categorías de la categoryList están interfiriendo de alguna manera con mi capacidad para obtener la Categoría del Libro (si solo me enlace directamente a Category.Name en un campo de texto debajo obtendré el valor incorrecto. Pero si hago un comentario sobre el enlace a categoryList, el valor es correcto) Voy a probar su sugerencia de depuración. Gracias. –
Esto fue realmente útil, gracias. Aunque, curiosamente, también tuve que hacer isSynchronizedWithCurrentItem = True para que funcione (estoy usando SelectedItem como se muestra arriba). No entendiendo esa parte. –
@Abby: ¿Está vinculando esta lista de objetos 'Categoría' a cualquier otra fuente de datos? Si es así, eso tendría sentido. –