C #, .NET 4.0, VS2010.
Nuevo en WPF. Tengo un ComboBox en mi MainWindow. Enganché el evento SelectionChanged de dicho cuadro combinado. Sin embargo, si examino el valor del cuadro combinado en el controlador de eventos, tiene el valor anterior. Esto suena más a un evento "SelectionChanging" que a un evento SelectionChanged.
¿Cómo obtengo el nuevo valor de ComboBox después de que la selección haya sucedido realmente?
Actualmente:
this.MyComboBox.SelectionChanged += new SelectionChangedEventHandler(OnMyComboBoxChanged);
...
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
string text = this.MyComboBox.Text;
}
Tenga en cuenta que obtengo el mismo comportamiento si uso el objeto que se pasa en el evento args, egeOriginalSource.
SelectionChanging
en primer lugar?Respuestas:
De acuerdo con MSDN,
e.AddedItems
:Entonces podrías usar:
También puede usar
SelectedItem
si usastring
valores para elItems
desender
:o
Dado que ambos
Content
ySelectedItem
son objetos, un enfoque más seguro sería utilizar en.ToString()
lugar deas string
fuente
ComboBox.SelectedItem
no tiene una propiedad llamadaText
, pero puede hacerloComboBox.SelectedItem as string
(aunque esto solo puede funcionar si lo usastring
paraItems
- no probó nada más)El valor correcto para verificar aquí es la propiedad SelectedItem .
Un ComboBox es un control compuesto con dos de sus partes:
La imagen de arriba se tomó inmediatamente después de que se expandió el ComboBox (es decir, antes de seleccionar un nuevo valor). En este punto, tanto Text como SelectedItem son "Info", asumiendo que los elementos ComboBox son cadenas. Si los elementos de ComboBox fueran todos los valores de un Enum llamado "LogLevel", SelectedItem actualmente sería LogLevel.Info .
Cuando se hace clic en un elemento del menú desplegable, se cambia el valor de SelectedItem y se genera el evento SelectionChanged . Sin embargo, la propiedad Text no se ha actualizado todavía, ya que la parte de texto no se actualiza hasta que finaliza el controlador SelectionChanged . Esto se puede observar poniendo un punto de interrupción en el controlador y mirando el control:
Dado que la parte de texto no se ha actualizado en este momento, la propiedad de texto devuelve el valor seleccionado anteriormente.
fuente
Utilice el evento DropDownClosed en lugar de selectionChanged si desea el valor actual del cuadro combinado.
Es así de simple.
fuente
Esto funcionó para mí:
fuente
Esto funcionó para mí:
fuente
sender
contiene la correctaSelectedItem
.El evento siguiente se activa para cualquier cambio del texto en el ComboBox (cuando se cambia el índice seleccionado y cuando se cambia el texto también editando).
fuente
fuente
La segunda opción no me funcionó porque el elemento .Text estaba fuera de alcance (C # 4.0 VS2008). Esta fue mi solución ...
fuente
Necesitaba resolver esto en VB.NET. Esto es lo que tengo que parece funcionar:
fuente
Es extraño que SelectedItem contenga los datos nuevos, mientras que SelectedValue no. Me suena como un error. Si sus elementos en el Combobox son objetos que no sean ComboBoxItems, necesitará algo como esto: (my
ComboBox
containsKeyValuePair
s)ComboBox.SelectedItem
puede ser nulo, mientras que Visual Studio me sigue diciendo queKeyValuePair
no puede ser nulo. Es por eso que lanzo elSelectedItem
to a nullableKeyValuePair<string, string>?
. Luego verifico siselectedItem
tiene un valor diferente anull
. Este enfoque debería ser aplicable a cualquier tipo de artículo seleccionado.fuente
Si realmente necesita el
SelectionChanged
evento, la mejor respuesta es la de SwDevMan81. Sin embargo, si está comenzando con WPF, es posible que desee aprender cómo hacer las cosas de la manera WPF, que es diferente a los viejos días de Windows Forms que solían depender de eventos comoSelectionChanged
, con WPF y el patrón Model View ViewModel, debe utilizar enlaces. Aquí hay un ejemplo de código:fuente
El uso de
e.AddedItems[0] as kProject
where kProject es una clase que contiene los datos que funcionó para mí, ya que estaba por defecto en RemovedItems [0] antes de hacer esta distinción explícita. Gracias SwDevMan81 por la información inicial que me respondió esta pregunta.fuente
No compliques las cosas sin motivo. Usando la propiedad SelectedValue, puede obtener fácilmente un valor ComboBox seleccionado como este: YourComboBoxName.SelectedValue.ToString ().
Detrás de la escena, la propiedad SelectedValue se define como: SelectedValue {get; set;} esto significa que puede usarlo para obtener o establecer el valor de un ComboBox.
El uso de SelectedItem no es una forma eficaz de obtener un valor ComboBox, ya que requiere muchas ramificaciones.
fuente
Puede comprobar la propiedad SelectedIndex o SelectedValue o SelectedItem en el evento SelectionChanged del control Combobox.
fuente
Esto debería funcionar para ti ...
fuente
Resolví esto usando el evento DropDownClosed porque esto se activa ligeramente después de que se cambia el valor.
fuente